一.函数的基本概念
1. 函数的定义
定义函数使用关键字def,后接函数名,再后接放在()中的可选参数列表,最后是冒号。格式如下
def hello(name,fistname): # 定义一个函数hello,strname是传给函数的参数
print(name,firstname) # 打印参数
调用时,直接使用函数名称即可。例:
hello("I love you") # 调用函数,结果输出:I love you!
2.函数的命名规则
函数名的命名有其对应的规则
- 必须以字母或下划线开头
- 可以包含任意字母、数字或下划线的组合
- 不能使用任何特殊字符或标点符号
- 区分大小写
- 不能是保留字
- 不能以数字开头
3.函数的组成部分
函数有四个组成部分:
- 函数名:def后面的名字
- 函数参数:函数名后面的变量
- 函数体:函数名的下一行代码,起始需要缩进
- 返回值:函数执行完的返回内容,用 return 语句返回。若无返回值,可不写 return,但即使不写 return 默认也会返回一个None
- 对于一般类型的函数来说,函数名和函数体是必须有的,函数的参数和返回值是可选的
文档字符串
在函数体中,常会在开始位置放一个多行字符串,用来说明函数的功能及调用方法。这个字符串为函数的文档字符串(docstring),说白了就是帮助文档。可使用代码print(函数名.doc)将其输出
def get_info(): # 定义一个函数 get_info
'''本函数用于返回用户姓名和年龄'''
name = 'tom'
age = 23
return name, age # 返回 name 和 age 的值
print(get_info.__doc__) # 用 __doc__ 返回文档字符串
help(get_info) # 用内置函数 help 来查看文档帮助信息
在实际应用中,文档字符串主要用于描述函数的相关信息,以便用户更好的浏览和输出。建议养成在代码中添加文档字符串的好习惯
此处文档字符串虽然我们用的是三引号,但其实单引号和双引号都可以实现相同的功能,只是因为在实际应用中我们要描述的内容比较多,会占据多行,所以用的三引号引用多行文本,若内容很短,只有一行的情况下用单引号、双引号与用三引号无甚区别
但要注意的是文档字符串必须在函数体的第一行
4.函数的参数:形参与实参
形参是从函数的角度来说的,在定义函数时写到括号中的参数就是形参。所谓形参就是形式上的参数
实参是从调用的角度来说的,在调用函数时写到括号里传给函数的参数就是实参,实参可以是常量、变量、表达式、函数。
实参的个数与类型应与形参一一对应,不能多也不能少
- 形参与实参的区别:
1.形参是虚拟的,不占用内存空间。形参变量只有在被调用时才分配内存单元
2.实参是一个变量,会占用内存空间,数据传送单向,由实参传给形参,不能由形参传给实参
import time
times = time.strftime('%Y--%m--%d')
def f(time):
print('Now is : %s' % time)
f(times)
5.函数的返回值
函数不需要返回值时可以什么都不做。若需要返回值时,就要使用 return 语句将具体的值返回。使用 return 语句可以一次返回多个值。调用时,可定义多个变量来接收,也可用一个元组来接收
def get_info():
name = 'tom'
age = 23
return name,age
myname,myage = get_info()
print(myname,myage) # tom 23
person = get_info()
print(person) # ('tom', 23)
-
返回值的作用:
结束函数。函数在执行过程中只要遇到 return 语句,就会停止执行并返回结果,所以可以理解为 return 语句代表着函数的结束
返回对象 -
注意:
若函数里没有明确指定return,则函数会默认返回一个None
若return多个对象,则python将会帮我们把这些对象封装成一个元组返回给我们
二.函数的参数
函数的参数有几种:
- 必备参数
- 关键字参数
- 默认参数
- 不定长参数
1. 必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样
def get_info(name, age):
print("My name is %s, I'm %d years old." %(name, age))
get_info('tom',25)
get_info('jerry',16)
2.关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
3.默认参数
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的sex,如果sex没有被传入
def get_info(name, age, sex='male'):
print('Name: %s' %name)
print('age: %d' %age)
print('Sex: %s' %sex)
get_info('tom',23)
get_info('jerry',30,'female')
4.不定长参数
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名
5.参数的位置优先级
参数的位置优先级:
- 关键字参数
- 默认参数
- args不定长参数
- kwargs不定长参数