本篇文章主要是对python学习时的一些总结,作为学习笔记记录。
函数是定义好的,可以重复使用的,具有特定功能的代码块
对于编程来说,使用函数的优点主要有:
- 提高代码的可复用性
- 提高代码的可维护性
- 提高代码的可读性
- 易于纠错
- 便于团队协作
函数定义
函数定义具有一定的规则:
- 函数代码块以def关键字开头,后接函数名和(),以冒号结尾
- 函数名命名规则与变量名命名规则相同,尽量采用下划线分隔的形式或者驼峰命名法命名
- 函数名最好不要与系统函数重名,避免使用冲突
- 函数形参位于()中
- 函数体要注意缩进
- 如果函数有返回值,需要书写return expression,没有return则返回None
- 在函数定义之前或函数体内部最好有该函数的使用说明
def func(var1, var2):
'''
:param var1:
:param var2:
:return:
'''
......
[return expression]
函数参数
实参和形参
- 函数形参是指函数定义时()内的参数列表
- 函数实参是指函数调用时()内的表达式
- 对于不许传递参数的函数来说,可以没有参数实参和形参
参数分类
- 位置参数:实参顺序必须和形参顺序完全一致,形参顺序决定实参顺序
- 关键字参数:函数调用时,实参可以是key-value,key为形参名,value为传递的变量值,利用关键字参数不必关心形参的顺序
- 默认参数:形参也可以给定一个值,那么函数在调用时就可以不用传递实参,从而可以简化调用
- 默认参数必须放到最右边
- 如果实参不为空,则默认值被覆盖
- 默认值只计算一次
- 默认值必须是不可变对象
- 可变参数:传入的参数个数是可变的,可以是0个,1个或是多个
- 使用 * 接受任意数量的位置参数,此时该可变参数被当作tuple
- 使用 ** 接受任意数量的关键字参数,此时该可变参数被当作dict
参数组合
当存在多种形式的形参类型时,各类形参出现先后顺序为:位置参数,默认值参数,*args,**kwargs
def func(var1, var2, var3 = 10, *args, **kwargs):
print('var1 is:', var1)
print('var2 is:', var2)
print('var3 is:', var3)
print('args is:', args)
print('kwargs is:', kwargs)
func(1,20)
print('*********')
func(var2 = 1,var1 = 20)
print('*********')
func(1,20,var3 = 40)
print('*********')
func(1,20,30,40,50,var4 = 60)
其中var1,var2为位置参数,var3为默认参数,args,kwargs为可变参数。
命令行参数
如果要获取命令行传递给python文件的参数可以使用sys模块的argv来获取。
import sys
print(sys.argv)
结果为:
['D:\\Anaconda3\\lib\\site-packages\\ipykernel_launcher.py', '-f', 'C:\\Users\\wood\\AppData\\Roaming\\jupyter\\runtime\\kernel-600692a8-7dff-4b01-83c3-c4296cfabdab.json']
函数调用
函数定义之后就可以使用函数,使用函数的过程叫做函数调用
为了函数的正确调用,必须保证参数传递正确无误。对上面的函数进行调用为:
var1 is: 1
var2 is: 20
var3 is: 10
args is: ()
kwargs is: {}
*********
var1 is: 20
var2 is: 1
var3 is: 10
args is: ()
kwargs is: {}
*********
var1 is: 1
var2 is: 20
var3 is: 40
args is: ()
kwargs is: {}
*********
var1 is: 1
var2 is: 20
var3 is: 30
args is: (40, 50)
kwargs is: {'var4': 60}
返回值
如果函数外部要用到函数内部的变量,可以利用return将该变量返回。
- 如果没有return,函数返回None
- return可以返回一个值,也可以返回多个值,多个值以元组的形式返回
- 执行完return语句后,函数结束返回调用处
def func():
return 1
def foo():
return 1,2,3
print(type(func()))
print(func())
print(type(foo()))
print(foo())
结果为:
<class 'int'>
1
<class 'tuple'>
(1, 2, 3)
文档字符串
函数文档字符串(docstring)是在函数开头,用来对接口进行解释,相当于帮助文档。函数文档一般包含:
- 函数的基础信息
- 函数的功能描述
- 函数形参的类型和使用信息
文档字符串书写规则:
- 必须在函数的首行
- 使用三引号注释的多行字符串
- 函数文档的第一行一般描述函数的主要功能,第二行空,第三行详细描述
- 可以使用__doc__属性查看文档字符串
def func(var1, var2):
'''
:param var1:
:param var2:
:return:
'''
print('func')
print(func.__doc__)
结果为:
:param var1:
:param var2:
:return:
参数传递
python的参数传递是值传递,这里的值是指变量的引用(地址),而不是变量的值。不存在值传递和引用传递的区别。简单说来,python的参数传递可以认为是C/C++中的对象引用传递,对象又可以分为:
-
不可变对象:int、float、None、complex、bool、tuple、str、range
-
可变对象:dict、list
不可变对象为不可以在函数内部修改函数外部的变量,可变对象为可以在函数内部修改函数外部的变量。
空函数
空语句借助空语句pass实现,函数体实际上不具有任何功能。
def func():
pass