python基础学习(四)之函数

python函数

一,python函数的定义和作用

1,函数的定义
	- 由若干语句组成的语句块,函数名称,参数列表构成,它是组织代码的最小单元
	- 完成特定的功能
	- 函数定义示例:
		def add(x,y): # def 关键字,define定义,定义时;add是函数名(最好做到见名知义),它是标识符,指向一个函数对象;(参数列表)参数列表中可以有n个参数,这些参数叫形式参数,简称形参
		   result = x + y  #   函数体,语句
		   return result  # return 返回值
	- 函数调用 
		add(10,20) # 调用时;10,20这是实实在在的参数,称为实参
			    
2,函数的作用
	- 结构化编程中对代码最基本的封装,一般按照功能组织一段代码
	- 封装的目的是为了复用,减少冗余代码
	- 代码更加简介美观,更易于阅读和理解
	

3,函数的分类
	- 内建函数,如max(),reversed()等
	- 库函数,如math.ceil()等
	- 自定义函数,使用def关键字定义,如def add(x,y)

4,如何给函数传实参
	- 按位置传参
	
		def add(x,y): 
			result = x + y
			print(x,y)
			return result
			
		add(1,3),add(3,6)
		1 3  # x=1,y=3 实参和形参的位置是对应的
		3 6 # x = 3,y=6  实参和形参的位置是对应的
		(4, 9)
				
	- 按名称传参,也叫按关键字传参
		add(x=11,y=22) # 指定x和y的值,此时实参的位置就不关紧要了
		11 22
		33
		
		add(y=22,x=11)
		11 22
		33
		
	- 按位置传参和按关键字传参混用
		add(30,y=100)
		30 100
		130

		add(x=30,100)
		
		  File "<ipython-input-33-d7f3cbbd3cb0>", line 1
add(x=30,100)
        ^
	SyntaxError: positional argument follows keyword argument
	
	由上面例子可知:按位置传参和按关键字传参可以混用,但是按位置传参必须在前,按关键字传参在后
	- 


4,缺省值
	
	- 缺省值在形参中定义
	- 如果函数在调用时没有传实参就可以动用设定的缺省值
	- 带缺省值的形参要放在后面
	
	def add(x=11,y=88):  # y=88 就是给y这个形参设定了一个缺省值
	    result = x + y
	    print(x,y)
	    return result
	    
		add(10)
		10 88 # 没有传实参给y,所以y就使用了设定的缺省值88
		98

		add(10,40)
		10 40 # 给形参y传了实参40,所以y就没有使用设定的缺省值
		50
		
		add()
		11 88  # x和y都没有传实参,所以都使用了缺省值
		99

		def add(x=10,y):  # 带缺省值得形参放到了没带缺省值形参的前面,会报错。
		    print(x,y)
		    return x+y   
			
			  File "<ipython-input-2-cded809fa398>", line 1
def add(x=10,y):
       ^
			SyntaxError: non-default argument follows default argument
			

5,形参的定义类型

	官方定义了五种形参的类型
	
	- 普通形参:可以有缺省值,两种(按位置和按关键字)传实参方式都可以用。利如下面的例子:
		def add(x,y=10):
		    print(x,y)
		    return x+y
		    
	- 可变位置形参 *args 可以接收0个或者多个按照位置传染的实参,不能接收按关键字传参,没有缺省值
		def add(*args):
			print(type(args),args)
		
		add(10,20,[5])
		<class 'tuple'> (10, 20, [5])
		
	- 可变关键字形参 **kwargs 可以接收0个或者多个按关键字传入的实参,不能接收关键字传参,没有缺省值
		def add(**kwargs):
			print(type(kwargs),kwargs)

		add(x=100,y=200)
		<class 'dict'> {'x': 100, 'y': 200}

		add(1,x=11)
		
		TypeError                                 Traceback (most recent call last)
		<ipython-input-18-d312264dc3b4> in <module>
		----> 1 add(1,x=11)
		
		TypeError: add() takes 0 positional arguments but 1 was given
		
	- keyword-only形参,*args或者*之后
		def foo(*args,x,y): # x和y只能通过关键字传入实参,位置传参会被args全部接收
			print(x,y,args)

		foo(1,2,x=3,y=4)
		3 4 (1, 2)

		def foo(x,*args,y):
			print(x,args,y)

		foo(1,2,3,x=100,y=200) # x即可以用位置传参,也能用关键字传参,这里x重复传参了。

		TypeError                                 Traceback (most recent call last)
		<ipython-input-12-d9cfc539d6ce> in <module>
		----> 1 foo(1,2,3,x=100,y=200)
		
		TypeError: foo() got multiple values for argument 'x'
					
		def fn(*,x,y): # x,y必须接收关键字传入的实参
			print(x,y)

		fn(x=10,y=20)
		10 20
		
- positional-only 形参,3.8之后支持,/之前,仅仅接收位置传入的参数
	
	def fn(x,y,/):
		print(x,y)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值