函数

函数

函数的定义

def bjdx (x,y):
	"比较两个数的大小,输出大的值"
	if x>y:
		return(x)
	else:
		return(y)

def 定义函数的关键字

bjdx 自己定义的函数名

(x,y) x,y代表传进的参数

“” 函数功能说明,运行代码时没有作用,仅增加程序可读性

if x>y: #程序代码块
return(x) #返回值
else:
return(y)
*返回多个值时,将多个值放入一个元组,并返回,如果没有返回语句则返回None值。

>>> def a():
	pass
>>> print(a())
None
>>> 

函数的调用

函数名()
函数名后加一个括号,括号里面可加参数

bjdx(1,2)#调用上面定义的函数

*函数的调用要在函数定义之后

参数

形参和实参

1、形参
形参只有被调用时,才分配内存空间,调用结束时,则释放空间,所以形参只有函数内部有效。

def bjdx (x,y):#x,y就是形参
	"比较两个数的大小,输出大的值"
	if x>y:
		return(x)
	else:
		return(y)

2、实参可以是常量,变量,表达式,函数,在调用之前,进行赋值操作。

def bjdx (x,y):
	"比较两个数的大小,输出大的值"
	if x>y:
		return(x)
	else:
		return(y)
bjdx(1,2)#1,2就是实参

位置参数和关键字参数

位置参数
>>> def handl(x,y,z):
	pass

>>> handl(1,2,3)
>>> handl(1,2,3,4)
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    handl(1,2,3,4)
TypeError: handl() takes 3 positional arguments but 4 were given
>>> handl(1,2)
Traceback (most recent call last):
  File "<pyshell#6>", line 1, in <module>
    handl(1,2)
TypeError: handl() missing 1 required positional argument: 'z'
>>> 

handl(1,2,3)中的1,2,3就是位置参数,和自定义handl中的x,y,z通过位置一一对应,不能多,也不能少,否则报错。

关键字参数
>>> def printf(x,y,z):
	print(x,y,z)
>>> printf(x=1,y=2,z=3)
1 2 3
>>> printf(x=1,z=3,y=2)
1 2 3
>>> 

printf(x=1,y=2,z=3),其中的参数就是关键字参数,也必须一一对应,但是通过关键字实现实参和形参的对应关系。

混合传参
>>> def printf(x,y,z):
	print(x,y,z)
>>> printf(1,y=2,z=3)
1 2 3
>>> printf(1,z=3,y=2)
1 2 3
>>> printf(x=1,2,3)
SyntaxError: positional argument follows keyword argument
>>> printf(1,y=2,3)
SyntaxError: positional argument follows keyword argument
>>> printf(1,y=2,z=3,y=3)
SyntaxError: keyword argument repeated
>>> 

通过上面的代码,我们可以总结一些混合传参的规则:
1、参数数量还是一一对应关系,一个参数不能传两次。
2、位置参数必须先传,即位置参数必须在关键字参数的左边

默认参数

>>> def printf(x=1,y=2,z=3):
	print(x,y,z)
>>> printf()
1 2 3
>>> printf(2,3,4)
2 3 4
>>> 

def printf(x=1,y=2,z=3)默认参数就是在定义函数时,就进行赋值的参数,此时不用传参,就可以运行程序,也可以通过传参去修改形参对应的实参。

参数组

  1. 和元组有关
    在定义函数时,如果参数名前面加’*’,则表示该参数是一个可变参数,在满足函数调用所需参数后,剩下的参数会以元组的形式收集在
    参里面。
>>> def printf(x,*s):
	print(x,s)
>>> printf(1,2,3)
1 (2, 3)
>>> printf(1,2,(3,4,5))#可以收集几乎所有类型的参数,除字典。
1 (2, (3, 4, 5))
>>> printf(1,2,'sd':d)#收集字典时报错
SyntaxError: invalid syntax
>>> 
  1. ** 和字典有关
    用来收集关键字参数,字典的类型存放在该参数中,调用时和调用字典类型参数无异。
>>> def printf(x,**s):
	print(x,s)
	print(s['key1'])
>>> printf(1,key1='密码1',key='密码2')
1 {'key1': '密码1', 'key': '密码2'}
密码1
  1. 注意:
    两种不同类型的收集参数,如果要一起使用,带一个*号的收集参数必须在带两个**收集参数的左边,否则报错。符合位置参数在关键字参数左边的大前提。
>>> def printf(x,*s1,**s2):
	   print(x,s1,s2)
>>> printf(1,2,3,key1=(4,5,6))   
1 (2, 3) {'key1': (4, 5, 6)}
>>> 

全局变量和局部变量

全局变量
全局变量就是顶格定义的变量,其作用范围是全局,在函数中也可以随时调用使用。
name = '全局变量'
def handl():
	print(name)
handl()
>>> 全局变量
局部变量
局部变量就是使用空格后定义的变量,它的作用域仅作用在所在的函数内,超出函数范围,调用无效。
def handl():
	name = '局部变量'
	print(name)
handl()
>>>局部变量
global
>>> name = '全局变量'
>>> def handl():
	name = '局部变量'
	print(name)
>>> handl()
局部变量
>>> print(name)
全局变量
>>> 
根据上面的代码,我们可以看出,当局部变量和全局变量重名时,在局部优先调用局部变量,而全局变量不发生改变。那有没有办法在函数外部调用局部变量呢?
>>> name = '全局变量'
>>> def handl():
	global name#将name作用于全局
	name = '局部变量'#更改全局变量
	print(name)
>>> handl()
局部变量
>>> print(name)
局部变量
>>> 
总结

全局变量尽量不要和局部变量重名,避免发生一些意外错误。
统一规范:全局变量用大写字母表示,局部变量用小写字母表示。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值