函数和内置函数
函数:
减少重复代码,一处定义多处调用,一处修改,多处改变。
def func_name(args):
print('运行逻辑',args)
return '返回值'
func_name('形参') #函数名指向函数的内存,后面加括号,运行该函数。
参数:形参 实参 位置参数 默认参数 关键字参数 非固定参数
形参函数定义时等待传递的参数,实参是调用函数时传递的参数。
形参中有多个参数时,传递实参时一般按照顺序传入实参,这种参数叫位置参数。
传递实参时使用 形参名=实参 的方法叫做关键字参数。
定义形参时还可以直接给形参赋值,如果不传入实参则默认传入该值。叫做默认参数。默认参数定义时必须在位置参数的后面。
非固定参数:
args : 可以传入任意多个值,传入时会被打包为元组。
当需要传入值是列表元组等值时,会整体的看做元组的一个值传入进去,想要解开列表将其中的元素直接传入需要在前面加号
args:可以传入任意个关键字参数,打包成一个字典传入。
当需要直接传入字典时,会被当做一个参数传入到其他参数中去,需要解开字典,将键值对传入再打包成字典,需要在字典前加号。
传入的多个元素和未定义的关键字参数会分别被 *args **kwargs 接收
def foo(a,*args,**kwargs):
print(a)
print(args)
print(kwargs)
foo('a','args','args1','args2',kwargs='k',kwargs1=123)
传入没有定义的关键字参数,这样就会被传入**kwargs
传入列表,元组,字典,想要被*args kwargs接收,需要在前面加上* 或
def bar(a,*args,**kwargs):
print(a)
print(args)
print(kwargs)
bar('a',*[1,2,3,4],**{'k':'v','k1':12})
返回值:
函数运行结束后 可以使用return 语句返回一个任意值。
def foo():
print('this is foo')
return 'this','is','return' # 返回多个值,会组合为元组。
print('return 后的语句不会运行,函数return 就结束了')
print(foo())
局部变量,作用域:
函数中调用变量时优先调用本地的局部变量,没有才去找全局变量。函数外,无法调用函数内的局部变量。
函数内声明的和全局变量相同的变量,并不是覆盖全局变量,而是声明了和全局变量无关的局部变量。
如果想要在函数内,改变全局变量的值,需要使用global val 明确定义下面使用的是全局变量
name = 'qianlei'
age = 20
def a():
global name
name = 'alex'
age = 30
print('a name :',name,id(name))
print('a age :',age,id(age))
def b():
global age
age = 40
print('b name: ',name,id(name))
print('b age :',age,id(age))
b()
a()
print('全局 name:',name,id(name))
print('全局 age :',age,id(age))
#运行结果:
a name : alex 31350600
a age : 30 8791270283200
b name: alex 31350600
b age : 40 8791270283520
全局 name: alex 31350600
全局 age : 40 8791270283520
匿名函数:
#匿名函数,lambda 参数 :逻辑
res = lambda x,y :x+ y
print(res(3,4))