不定长参数
一、定义函数时可以在形参前面加一个星号,这样这个形参可以获取所有的实参,
并将所有的实参保存在一个元组中
二、带星号 参数只能有一个,可以配合其他参数使用 。
三、带一个星号的形参,只能获取位置参数不能获取关键字参数。
四、带两个星号的形参,可以获取其他关键字参数,并将他们保存在一个字典中
字典的kye就是参数的名字,字典的value结束参数的值。
五、带两个星号的形参只能有一个并且要放在最后。
#定义函数时可以在形参前面加一个星号,这样这个形参可以获取所有的实参并将所有的实参保存在一个元组中.
#def fun(*b):
#print(b)#输出为(1,2,3,4,5)这是一个元组类型
# r = 0
#for i in b:
# r += i
#print(r)
#fun(1, 2, 3, 4, 5)
#带星号 参数只能有一个,可以配合其他参数使用 。位置传参不定长参数可以和其他传参方式混合使用但是不能放在位置传参的前面。
# 不定长参数要放到关键字传参的前面。带一个星号的形参,只能获取位置参数不能获取关键字参数。
def fun(c,*a,b):
print(a)
r = 0
for i in a:
r += i
print(r)
fun(1,2,3,4,5,b=6)
#带两个星号的形参,可以获取其他关键字参数,并将他们保存在一个字典中字典的kye就是参数的名字,字典的value结束参数的值。
def fun1(*f, **e):#(万能参数) #关键字传参的不定长参数:位置传参必须要放在不定长参数的前面,关键字传参要放在关键字传参不定长参数的前面。
# 带两个星号的形参只能有一个并且要放在最后。
print(e)
print(f)
fun1(1, 2, 3, a=1, b=2, c=3, d=4, h=1 )
#不定长参数的正规写法
def fun2(*args, **kwargs):#(万能参数):*srgs获取所有位置传参,**kwarsg获取所有关键字传参。
pass
参数的拆包
一、传递参数时,也可以在序列类型的参数加上星号,
这样它会自动将序列中的元素依次作为参数传递。
二、要求序列中的元素个数必须和参数个数一致。
#传递参数时,也可以在序列类型的参数加上星号,这样它会自动将序列中的元素依次作为参数传递。
def fun(a,s,d):
print(a)
print(s)
print(d)
#tuple = (1,2,3,4)要求序列中元素的个数必须和参数的个数相同否则就会报错。
tuple = (1,2,3)
dict1 = {'a': 1, 's': 2, 'd': 3}
#参数的拆包
#fun(tuple[0],tuple[1],tuple[2])这是一种方法但是不够简洁这时候就可以用到加星号的方法。
fun(*tuple)# 加星号可以让它将序列中的元素依次作为参数传递
fun(**dict1)
函数的返回值
一 、返回值就是函数执行后返回的结果。
二、通过return来指定返回的结果.
三、return后面可以跟任何对象,返回值甚至可以是函数。
# 创建函数的作用和使用函数的方法:实现一些代码,完成一个功能的开发。在函数里面的东西,想要拿到外面去用必须要返回出来,也就是说要由return返回出来。
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() # 函数的返回可以返回任何类型的数据。
# print(fun(1,2,3)) # 调用的函数获得了返回值的结果。
res = fun #res() = fun()() = fun1 #调用fun1
print(res())
# print(r)
# 一个函数想要有返回值必须写: return xxxx, 如果没有return 和 只有return没有返回对象,那么这个函数的返回值都是None
def fun1():
print(1)
return #renturn后面的代码都不再执行,看见return会直接退出函数
print(2)
print(fun1())
函数练习
def fun(*args):
r = 0
for i in args:
r += i
print(r)
return args
#print(fun(1+2,3))#输出为6和None.函数调用fun() fun(1+2,3)是返回值即等于(args),也就是等于return返回的值.因为没有return所以返回值为None.
print(fun(1+2,3)) #输出为6,(3,3)因为写了return 返回值是args也就是fun(1+2,3)
#1、函数的参数的传递:传递的参数(1+2,3)
#2、函数的调用:fun()
#3、函数的返回值:fun(1+2,3)也就是args
#4、函数的调用等于什么:fun(1+2,3)也就是args
文档字符串
一、help()是python中的内置函数,
通过help函数()可以查询python函数的用法
二、在定义函数的时候可以用上文档字符串,文档字符串就是对函数的说明。
# 文档字符串
'''
#长字符串的作用:
1、可以作为多行注释
2、保留文本的格式
'''
# 文档字符串的作用:对函数和类进行说明作用,以及参数返回的一个文档说明。
def fun(a,b):
'''
:param a:
:param b:
:return:
'''
help(print) # help用来查看pytho函数,不能加调用只能加函数名。
函数的作用域
一、作用域是指变量生效的区域 。
二、函数里面有两种作用域。
1、全局作用域
2、全局作用域在调用时创建,在调用结束后时销毁。
3、所有函数以外的区域都是全局作用域。
4、在全局作用域中定义的变量,都是全局变量,全局变量在程序中任意位置都可以进行访问。
5、函数作用域
6、函数作用域在函数调用时创建,调用结束时销毁。
7、在函数作用域中定义的变量, 都是局部变量,只能在函数内部被访问。
# 函数的作用域
a = 1 # 顶格写的都是全局作用域
def fun():
#a = 1本来到这里a应该为1因为a=1是全局作用域的,都是下面给a进行了重新赋值
#使局部作用域变成全局作用域的方法
global a #此处声明a为全局作用域
a = 10#对a进行重新赋值
print(a)
def fun1(): #局部作用域在函数内
print(a)
fun1()#所以这里调用出来也是10
fun()
print(a)#当回到全局时为1.(因为在函数作用域中在函数调用时开始,函数调用结束时销毁)。回到全局时那个a=10已经销毁了,所以等于1
命名空间
一、命名空间实际上就是一个字典,是一个专门用来存储变量的字典。
二、locals()用来获取当前作用域的命名空间。
三、如果在全局作用域中调用locals()则获取全局的命名空间,如果在函数作用域中调用locals()则获得局部的命名空间。
四、返回的是一个字典
# 命名空间
a = 1
b = 2
c = 3
def fun():
a = 1
b = 2
s = locals()#获取局部的命名空间
#s = glocals()获取全局的命名空间
print(s)
pass
fun()
s = locals() # 获取当前作用域的所有变量并以字典的形式返回出来
print(s)
课后作业
一、用函数实现一个判断用户输入的年份是否是闰年的程序
1、能被400整除的年份
2、能被4整除,但是不能被100整除的年份
3、以上2种方法满足一种即为闰年。
def rn():
while True:
nf = int(input('请您输入任意年份:'))
if nf%400 == 0:
print('您输入的是闰年!')
elif nf%4 == 0 and nf%100!=0:
print('您输入的是润年!')
else:
print('您输入的不是闰年!')
rn()