定义:def func():
pass
调用:func()
调用时是往上边去找,如果没有找到,会报错NameError
你有听说过DRY吗? DRY是程序员们公认的指导原则:Don't Repeat Yourself. 快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!
使函数可以个性化!
只需使用return关键字
没有return时默认返回None
给函数写文档,让人们更容易理解函数
func.__doc__打印出函数文档(特殊属性)
>>> def func(): ... 'func doc' ... print('xxxx') ... >>> func() xxxx >>> func.__doc__ 'func doc'help(func)也可以看到函数文档 help(func) Help on function func in module __main__: func() func docprint.__doc__能打印出print()函数的文档,但是是原样转义的反斜杠,不够漂亮,help()返回的漂亮
解决为止参数太多时,位置放不对的问题!
>>> def func(name, age): ... print(name + '->' + str(age)) ... >>> func(age=27, name='liyi') liyi->27默认值参数必须放在后边!
>>> def func(name='liyi', age): ... print(name + '->' + str(age)) ... File "<stdin>", line 1 SyntaxError: non-default argument follows default argument当不知道要传入到少参数时使用,只需要在关键字参数前加个*号,其实就是用元组打包起来给params而已
>>> def test(*params): ... print('the length is:', len(params)) ... print('the second param is:', params[1]) ... >>> test(1, 'xiaoyi', 3, 'a') the length is: 4 the second param is: xiaoyi >>> def test(*params, exp):当使用test(1,2,3,4,5,'a')调用时会报错,因为所有参数会被params收集,exp得不到参数;可以test(1,2,3,4,5, exp='a')来解决;建议把收集参数后边的参数设计为默认的参数,如print()函数:
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False) #*value
1. 请问这个函数有多少个参数?
def MyFun((x, y), (a, b)): return x * y - a * b如果你回答两个,那么恭喜你错啦,答案是0,因为类似于这样的写法是错误的! 我们分析下,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。 我想你如果这么写,你应该是要表达这么个意思:
1. >>> def MyFun(x, y): 2. return x[0] * x[1] - y[0] * y[1] 3. 4. >>> MyFun((3, 4), (1, 2)) 5. 10