函数(一)

基本定义

定义:函数是指将一组语句的集合通过一个函数名封装起来,如果想要执行这段函数,只需要调用其函数名即可。

特性:

  1. 减少重复代码
  2. 程序可扩展
  3. 程序易于维护
语法定义
def function_name(*args):  # def关键字用来定义函数  function_name函数名,*args代表可以有任意个参数
	code							   #代码块
	...

function_name(*args)		 #调用函数

参数的作用在于调用函数时,通过传入不同的参数来决定函数内部的执行流程,从而满足自己不同的需求。

注意:如果想要调用函数,必须要加括号,参数的话视实际情况而定,如果不加参数,不是调用函数,而是函数的地址,如下:

#python解释器
>>> def fun():
		print('help')
>>> fun
<function fun at 0x0000000002F8CAE8>   # at之后是内存地址
>>> fun()
help

参数

形参

形式参数,只有在被调用时才会分配内存单元,在调用结束时,即刻释放所分配的内存单元,因此形参只在函数内部有效,可以简单的理解为只是一种意义上的参数,在定义的不是并不占内存地址。

实参

实际参数,实际占用内存地址,在调用函数时,实际传递给函数的参数,函数访问该参数的内存地址,可以是常量、变量、函数等。

def fun(x, y):  # x和y代表形参
    print x + y
fun(a, b)		# a和b代表实参
部分特殊参数
默认参数

在定义函数的时候可能会遇到这么一种情况,比如学生注册,在注册国籍的时候,如果是在中国境内,那么国籍很大一部分是中国,这样的话每次频繁输入会比较麻烦,那么可以将国籍设置成默认参数,不填写的话默认就是默认值,如果不一样的话可以对改参数进行修改,同样可以省掉大部分重复的工作。
默认函数定义语法:

#位置参数:以位置顺序确定对应关系的参数
def fun(param1, param2,param3='default value'):  # 这里param1,param2叫做位置参数,param3叫做默认参数
	code
	...

这里需要注意的是,默认函数必须放在位置参数之后,否则会报错,SyntaxError: non-default argument follows default argument。

关键参数

正常情况下,给函数传参数的时候需要按照函数参数的的顺序,如果不想按照顺序就可以使用关键参数,只需要指定参数名即可,指定了参数名的参数就叫做关键参数,但是,关键参数必须放在位置参数之后。如下所示:

#python解释器
>>> def stu_register(name, age, major='math', country='中国'):
	print("---注册学生信息---")
	print("姓名:%s\n年龄:%s\n国籍:%s\n专业:%s" % (name, age, country,major))

	
>>> stu_register("张三", major='Chinese', age=23)  # 正确调用
---注册学生信息---
姓名:张三
年龄:23
国籍:中国
专业:Chinese
>>> stu_register("张三", major='Chinese', 23, country="印度")  # 错误调用
SyntaxError: positional argument follows keyword argument
非固定参数

在实际场景中可能会遇到一种情况,就是你也不知道调用者会传递多少个参数,那么就可能会用到python中的非固定参数。
python中的非固定参数有两种,一种是args,一种是**kwargs,区别是args会将传入参数打成元组形式,通常传递位置参数,**kwargs会将传入的参数打成字典,通常传递关键参数。
*args:

#python解释器
>>> student_register("张三", 22)
张三 22 ()  # 这里的括号就是上面的args,因为没有传值,所以为空。
>>> student_register("张三", 22, '中国', '河北')
张三 22 ('中国', '河北')  # 将最后两个元素打成了tuple

**kwargs:

#python解释器
>>> def student_register(name, age, *args, **kwargs):
	print(name, age, args, kwargs)
>>> student_register("张三", 22, "本科", "数学")
张三 22 ('本科', '数学') {}  # ‘{}’里就是**kwargs,没传值,所以为空
>>> student_register("张三", 22, "本科", "数学",native_place='河北石家庄',address="山东济南")
张三 22 ('本科', '数学') {'native_place': '河北石家庄', 'address': '山东济南'}

返回值

我们上面定义的函数,都是在调用的时候直接进行输出的,那么我们能接受他们的返回值吗?

#python解释器
>>> info = stu_register("张三", major='Chinese', age=23)
---注册学生信息---
姓名:张三
年龄:23
国籍:中国
专业:Chinese
>>> print(info)
None

结果为None,说明我们没有获取到函数的运行结果,那么如果想获取运行结果给外部调用,那么就需要使用return语句来讲结果返回给调用者(这里解释一下,个人理解,你没有写return语句,不代表这个函数没有返回,只不过是返回None)。

# python解释器
>>> def stu_register(name, age, major='math', country='中国'):
	if(age < 50):
		print("---注册学生信息---")
		print("姓名:%s\n年龄:%s\n国籍:%s\n专业:%s" % (name, age, country,major))
		return "注册成功"
	else:
		print("年龄太大,注册失败")
		return "注册失败"
>>> info = stu_register("张三", major='Chinese', age=23)
---注册学生信息---
姓名:张三
年龄:23
国籍:中国
专业:Chinese
>>> print(info)
注册成功

tips:函数在执行过程中如果遇见return语句,那么就会停止执行并返回结果,也就是在return后面的语句就不会执行了,如下图,上面的’return语句之后’并没有被打印出来

>>> def stu_register(name, age, major='math', country='中国'):
	if(age < 50):
		print("---注册学生信息---")
		print("姓名:%s\n年龄:%s\n国籍:%s\n专业:%s" % (name, age, country,major))
		return "注册成功"
		print('return语句之后')
	else:
		print("年龄太大,注册失败")
		return "注册失败"
		print('return语句之后')

		
>>> stu_register("张三", major='Chinese', age=23)
---注册学生信息---
姓名:张三
年龄:23
国籍:中国
专业:Chinese
'注册成功'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值