python函数进阶
Posted changyifei-8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python函数进阶相关的知识,希望对你有一定的参考价值。
函数的传参:形参角度:第三种传参方式。
**动态参数:*args**
def eat(food1,food2,food3): print(f'我请你吃:food1,food2,food3') eat('蒸羊羔','蒸熊掌','蒸鹿尾') 当给函数传入的参数数目不定时,之前的传参方式解决不了问题。 # 万能参数,动态参数。 *args def eat(food1,food2,food3): print(f'我请你吃:food1,food2,food3') eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅') def eat(*args): # 实参角度:定义一个函数时,* 将所有的位置参数聚合到一个元组中。 print(args) print(f'我请你吃:args') eat('蒸羊羔','蒸熊掌','蒸鹿尾','烧花鸭','烧企鹅') # **kwargs def func(**kwargs): # 函数的定义时:**将实参角度所有的关键字参数聚合成了一个字典,给了kwargs. print(kwargs) func(name='alex',age=84,hobby='唱跳rap篮球') # *args,**kwargs 万能参数 def func(*args,**kwargs): print(args,kwargs) func(1,2,4,'fjdksal',age=84,hobby='唱跳rap篮球')
练习:写一个函数,求传入函数中的不定个数的数字实参的和。
def sum1(*args): # print(args) (100, 2, 67, 3) result = 0 for i in args: result += i return result print(sum1(100,2,67,3))
*的魔性用法
# *的魔性用法: (函数中) def func(*args,**kwargs): print(args) # (1, 2, 3,'太白', 'wusir', '景女神') print(kwargs) l1 = [1, 2, 3] l2 = ['太白', 'wusir', '景女神'] func(l1,l2) func(*l1,*l2) # 当函数的执行时:*iterable 代表打散。 func(*[1, 2, 3],*(11,22),*'fdsakl') # 当函数的执行时:*iterable 代表打散。 def func(*args,**kwargs): print(args) print(kwargs) func(**'name':"alex",**'age': 73,'hobby': '吹') 当函数的执行时:**dict 代表打散。 # 函数外:处理剩余元素 a,b,*c = [1,2,3,4,5] # a = 1 , b = 2 , c = [3, 4, 5] a,*c,b, = [1,2,3,4,5] # a = 1 , b = 5 , c = [3, 4, 5] a,*c = range(5) # a = 0 , c = [1, 2, 3, 4] a,*c,b = (1,2,3,4,5,6) # a = 1 , b = 6 , c = [2, 3, 4, 5] print(a,c,b)
形参角度的最终顺序
# *args的位置 # *args不能放在位置参数前面,a,b取不到值 def func(*args,a,b,sex='man',): print(a) print(b) print(sex) print(args) # print(kwargs) func(1,2,4,5,6) # args如果想要接收到值之前,肯定要改变sex默认参数。 def func(a,b,sex='man',*args): print(a) print(b) print(sex) print(args) # print(kwargs) func(1,2,4,5,6) def func(a,b,*args,sex='man'): print(a) print(b) print(sex) print(args) # print(kwargs) func(1,2,4,5,6) func(1,2,4,5,6,sex='women') # **kwargs # 位置参数,*args,默认参数,**kwargs def func(a,b,*args,sex='man',**kwargs,): print(a) print(b) print(sex) print(args) print(kwargs) func(1,2,4,5,6,name='太白',age=18)
函数的传参:形参角度:第四种传参方式(了解)
# 仅限关键字参数 (了解) # 位置参数,*args,默认参数,仅限关键字参数,**kwargs def func(a,b,*args,sex='man',c,**kwargs,): print(a) print(b) print(sex) print(c) print(args) print(kwargs) func(1,2,4,5,6,67,c=666,name='太白',age=18,)
从空间角度研究函数
全局名称空间: py文件运行时开辟的,存放的是执行的py文件(除去函数内部)的所有的变量与值(地址)的对应关系,整个py文件结束之后,才会消失。
临时(局部)名称空间: 函数执行时,在内存中临时开辟的一个空间,存放的函数中的变量与值的对应关系,随着函数的结束而消失。
内置名称空间:input,print,内置函数等。
取值顺序加载顺序
加载顺序:上面这三个空间,谁先加载到内存。
内置名称空间 ----》 全局名称空间 ----》 (函数执行时)临时名称空间
取值顺序:(就近原则)
作用域
全局作用域:全局名称空间,内置名称空间。
局部作用域:局部名称空间。
内置函数:globals,locals
"""此文件研究的是内置函数 globals locals""" name = 'alex' l1 = [1, 2, 3] def func(): age = '18' print(globals()) # 全局作用域所有的内容 print(locals()) # 当前位置 name = 'alex' l1 = [1, 2, 3] def func(): age = '18' oldboy = '老男孩教育' print(globals()) # 全局作用域所有的内容 print(locals()) # 当前位置的变量与值的对应关系 func() name = 'alex' l1 = [1, 2, 3] def func(): age = '18' oldboy = '老男孩教育' def inner(): name_class = 'python23期' print(globals()) # 全局作用域所有的内容 print(locals()) # 当前位置的变量与值的对应关系 inner() func()
高阶函数(嵌套函数)
# 例1: def func1(): print('in func1') print(3) def func2(): print('in func2') print(4) func1() print(1) func2() print(2) '''结果 in func1 3 1 in func2' 4 2 ''' # 例2: def func1(): print('in func1') print(3) def func2(): print('in func2') func1() print(4) print(1) func2() print(2) '''结果 1 in func2 in func1 3 4 2 ''' # 例3: def fun2(): print(2) def func3(): print(6) print(4) func3() print(8) print(3) fun2() print(5) '''结果 3 2 4 6 8 5 '''
以上是关于python函数进阶的主要内容,如果未能解决你的问题,请参考以下文章