不定长参数
不定长参数
只能存在一个函数有*号,可以和其他的传参方式配合使用。
位置参数不能放到不定长参数的后面。
不定长参数 *a要放到
def fun(b,*a):
print(a)
r = -0
for i in a:
r +=i
print(r)
fun(1,2,3,4)
以元组展示
def fun(c,*a,d):
print(a)
r = 0
for i in a:
r=r+i
print(r)
fun(1,3,4,d=2)
关键字传参的不定长参数,以字典展示出来
def fun1(**e):
print(e)
fun1(a=1,b=2,c=3,d=4)
位置传参必须放到不定长参数的前面,关键字传参要放到关键字传参的不定长参数前
def fun1(f,g,**e):
print(e)
fun1(1,2,a=1,b=2,c=3,d=4)
万能参数
def func2(*g,h,**e):
print(g)
print(h)
print(g)
func2(1,2,a=1,b=2,c=3,d=4,h=1)
不定长参数的正规写法
def fun2(*args,**kwargs):
pass
参数的拆包
def fun(a,b,c):
print(a)
print(b)
print(c)
tuple1=(1,2,3)
dict1 = {'a':1,'b':2,'c':3}
fun(tuple1[0],tuple1[1],tuple[2])
#参数的拆包
fun(*tuple1)
fun(**dict1)
函数的返回值
- 函数内的变量或执行结果,想要直接到函数外去使用,是不行的。
def fun(*args):
r = 0
for i in args:
r +=i
print(r)
# return r #返回了r的值,但是在外面不能使用r这个名字
# return [1,2,3]
# return True
def fun1():
pass
return fun1 # 函数的返回值可以返回任何类型的数据
#fun(1,2,3)
#print(fun(1,2,3))# 函数的调用获得了函数的返回值的结果,但函数调用了两次
res =fun(1,2,3)
print(res)
一个函数要想有返回值,必须写return xxxx,如果没有return 或只有一个return没有返回对象,那么这个函数的返回值都是None。
例题
def fun1():
print(1)
return#return后面的代码都不再执行,看到return会退出函数
print(2)
print(fun1())#None
def fun(*a):
r = 0
for i in a :
r+=i
print(r)
# return a
print(fun(1+2,3))#函数的调用fun(),fun(1+2,3)等于函数的返回值,如果return a 则会打印(3,3)
#结果:6 None
#函数的参数传递
#函数的调用
#函数的返回值
#函数的调用等于什么
文档字符串
长字符串:
1.保留文本格式
2.作为一个多行注释
文档字符串就是对函数以及类进行说明作用及参数及返回的一个文档说明,相当于一个使用说明书
help(input)
help(print)
help(fun())#
函数的作用域
- 作用域(scope)
- 作用域指的是变量生效的区域
- 在Python中一共有两种作用域
全局作用域
全局作用域在程序执行时创建,在程序执行结束时销毁
所有函数以外的区域都是全局作用域
在全局作用域中定义的变量,都是全局变量,全局变量可以在程序的任意位置进行访问
函数作用域
函数作用域在函数调用时创建,在调用结束时销毁
函数每调用一次就会产生一个新的函数作用域
在函数作用域中定义的变量,都是局部变量,它只能在函数内部被访问
a=1
def fun():
a=10
print(a)#1.第一个打印
def fun1():#2.进入函数
print(a)
fun1()#3在这里调用了,然后再打印10
fun()
print(a)#4全局变量a=1
#结果为 10 10 1
def fun():
# a = 1
# 使局部作用域变为全局作用域的办法
global a # 声明此处的变量a是全局变量
a = 10 # a的重新赋值
print(a)
def fun1():
print(a)
fun1()
fun()
print(a)
#结果为10 10 10
命名空间
- 命名空间实际上就是一个字典,是一个专门用来存储变量的字典
- locals()用来获取当前作用域的命名空间
- 如果在全局作用域中调用locals()则获取全局命名空间,如果在函数作用域中调用locals()则获取函数命名空间
- 返回值是一个字典
a = 1
b = 2
c = 3
d = 4
def fun():
a = 1
b = 2
s = locals() # 获取局部作用域的命名空间
# s = globals() # 获取全局作用域的命名空间
print(s)
pass
fun()
s = locals() # 获取当前作用域的所有变量,并且以一个字典的形式返回出来
print(s)
作业
用函数实现一个判断用户输入的年份是否是闰年的程序
1.能被400整除的年份
2.能被4整除,但是不能被100整除的年份
以上2种方法满足一种即为闰年
a = int(input('请输入一个年份:'))
def run():
if a %400 ==0 :
print(f'{a}为闰年')
elif a%4==0 and a%100!=0:
print(f'{a}为闰年')
else:
print(f'{a}不为闰年')
run()