- 函数关键字
- 函数的定义
- 函数参数与作用域
- 函数返回值
1.函数关键字
是python内置的,具有特殊意义的标识符。
关键字后面不需要使用括号。
# 一些查看内置关键字的命令
>>> import keyword
>>> print(keyword.kwlist)
>>> print(len(keyword.kwlist))
2.函数的定义
def 函数名():
函数封装的代码
1.def是英文define的缩写
2.函数名称应该能够表达函数封装代码的功能,方便后续的调用
3.函数名称的命名应该符合标识符的命名规则:可由字母,下划线和数字组成,不能以数字开头,不能与关键字重名
4.定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回
创建
如下是定义一个可以用来取绝对值的函数的过程。
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
我们可以观察到函数一些基本特征:
创建函数要用 der 函数名 (): 这个方式
定义完函数后一定要打 : 来让下面的代码段执行。
执行的部分一定要缩进,确保代码在以上的条件下执行。
最后用 return 来结束函数。
3.函数参数与作用域
函数有四种参数:
第一种参数类型:必需参数
啥叫必需函数?就是你必须按照正确的顺序和规则来传入参数。用我们之前说过的 list.pop() 举例子
>>> a = [1,2,3,4,5,6]
>>> a.pop(1,2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes at most 1 argument (2 given)
list.pop() 语句可以在 () 内输入索引删除指定的元素,但是要求就是一次只能输入一个。当我们输入了两个索引时,报错很清楚的告诉我们:
pop() takes at most 1 argument (2 given)
由此得知:像这样当你不按照正确的顺序或者既定规则传入会报错的参数,即为必需参数。
2.关键字参数
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
3.默认参数
传入的多个值中有默认项,默认项可更改。例如:
##def enroll(name, gender, age=6, city='Beijing'):
print('name:', name)
print('gender:', gender)
print('age:', age)
print('city:', city)
>>>enroll('Bob', 'M', '7') ###按默认顺序
>>>enroll('Bob', 'M', city='TianJin') ###不按默认顺序
##默认参数必须自指向不变对象
###def add_end(L=None):
if L is None:
L = []
L.append('END')
return L
4.不定长参数
有时你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述 2 种参数不同,声明时不会命名。基本语法如下:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
4.函数的作用域和返回值
函数变量的作用域:
Python 中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是
L (Local) 局部作用域
E (Enclosing) 闭包函数外的函数中
G (Global) 全局作用域
B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
函数的返还值:
函数的最后都有一个返回值return,可以用来获取该函数执行结果返回给该函数,让外部调用该函数的根据返回的值不同做不同的事。
返回值可指定,如果不指定默认返回None。