#python有很多内置函数
#如abs(), max(1,2,3,4), int('123'), float('12.34'),
#str(12.3), bool(1), hex()
#定义函数
def my_abs(x):
if x >= 0:
return x
else:
return -x
#调用
print(my_abs(-1))
#如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,
#用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名)
#空函数
def nop():
pass
#pass还可以用在其它语句里
age = 0
if age >= 18:
pass
#!!!函数返回多个值
import math
def move(x, y, step, angle = 0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx,ny
a = [move(1,2,3,4)]
print(a)
#原来返回值是一个tuple!
#定义默认参数要牢记一点:默认参数必须指向不变对象!
def add_end(L=[]):
L.append('END')
return L
print(add_end())
print(add_end())
print(add_end())
#结果:
#['END']
#['END', 'END']
#['END', 'END', 'END']
#这就尴尬了,它其实在第一次调用的时候,建立了一个list L
#所以,定义默认参数要牢记一点:默认参数必须指向不变对象!
def add_end2(P=None):
if P is None:
P = []
P.append('END')
return P
print(add_end2())
print(add_end2())
print(add_end2())
#可变参数函数,允许你传入0个或任意个参数, 参数前面加*
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calc(1,2,3))
#很方便的关键字参数,(检查是否有city和job参数)参数和缺省值
def person(name = 'UNKNOWN', age = 'UNKNOWN', **kw):
if 'city' in kw:
#有city参数
print('city found!!!')
if 'job' in kw:
#有job参数
print('job')
print('name:', name, 'age:', age, 'other:', kw)
person('Leo', 19, city='Wuhan', addr='Gansu', zipcode=745000)
print(person())
#参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
#比如说:如果缺少*,Python解释器将无法识别位置参数和命名关键字参数
#递归函数
#递归计算阶乘
def cal(a):
if a == 1:
return a
return a * cal(a - 1)
#递归计算5050
def cal_2(b = 100):
if b == 1:
return 1
return b + cal_2(b - 1)
print(cal(3))
print(cal_2(100))