1.动态参数
*位置参数
代码块
age=(1,3,4,5,65,12)
def student(*name): # **name动态接收位置参数
print(name)
student('wangsiyu','nezha','xuwei') # ('wangsiyu', 'nezha', 'xuwei')
student(*age) #*表示打散 (1, 3, 4, 5, 65, 12)
**关键字参数
代码块
def student(**name): # **food动态接收关键字参数
print(name) #{'name1': 'wangsiyu', 'name2': 'nezha', 'name3': 'xuwei'}
student(name1='wangsiyu',name2='nezha',name3='xuwei')
2.命名空间和作用域
2.1 命名空间
-
内置命名空间: python解释内部运行时的变量函数
-
全局命名空间: 我们在py文件中直接声明出来的变量,函数
-
局部命名空间: 在函数内部声明的变量和函数.
2.2作用域
1.全局作用域:内置+全局
2.局部作用域:局部
globals() 查看全局作用域中的名字
locals() 查看当前作用域中的名字
global: 把全局变量拿到局部来用.
nonlocal: 把离他最近的一层的变量拿过来.不会找全局
3. 写函数. 给函数传递任意个整数. 返回这些数的和
代码块:第一种方法
def sum_num(*num):
print(sum(num))
sum_num(1,2,3,4,5) #15
代码块:第二种方法
def sum_num(*num):
print(type(num)) #<class 'tuple'>
sum=0
for i in num:
sum+=i
print(sum)
sum_num(1,2,3,4,5,6) #21
4.写一个函数,可以接收位置参数,和关键字参数
代码块
def func(name,*args,**kwargs):
print(name) #ec14
print(args) #('wangsiyu', 'gongxudong', 'nezha')
print(kwargs) #{'count': 24, 'teacher': 'wanjun', 'location': 'liao ning province'}
func('ec14','wangsiyu','gongxudong','nezha',count=24,teacher='wanjun',location='liao ning province')
5.在函数中实参形参各个参数的位置
形参: 1.位置参数, 2, *args, 3.默认值参数, 4. **kwargs
实参:1. 位置参数. 2.关键字参数. 3. 混合参数
代码块
def func(name,*args,teacher='万君',**kwargs):
print(name) #ec14
print(args) #('wangsiyu', 'gongxudong', 'nezha')
print(teacher) #万君
print(kwargs) #{'count': 24, 'girl': 18}
func('ec14','wangsiyu','gongxudong','nezha',count=24,girl=18)
6. 变量取值就近原则
代码块
a=20
def func():
a=2
print(a)
print(globals()) #获取内置和全局的变量名字
print(locals()) #获取当前函数内部的变量
func()
7.函数的嵌套
函数的嵌套代码块
def func1():
print('1')
def func2():
print(2)
def func3():
print(3)
func4()
print(4)
func3()
def func4():
print('game over')
print(666)
func2()
func1()
#res: 1 666 2 4 3 gameover
8.全局变量global
代码块
a=10
def func():
global a #会重新给全局变量a赋值
a=666
print(a)
func()
print(a)
9. nonlocal(改变距离他最近一层的局部变量的值)
代码块
a=20
def func1():
a=25
print(a)
def func2():
nonlocal a
a=30
print(a)
func2()
print(a)
func1() #25 30 30
print(a) #20 全局变量
10.实参传递的打散
代码块
lst = ["马虎疼", "大洋哥", "小花生", "毛尖妹妹"]
func(*lst) # 实参, 打散, 迭代产生的
dic = {"name":"太白","alex":"wuse"}
func(**dic)# 把字典打散. 以key=value形式进行传参
别跑,点个赞再走
网友评论