@danren-aa120
2019-08-20T00:03:15.000000Z
字数 2644
阅读 345
Python
1) 函数的基本使用
函数:就是把具有独立功能的代码块组织为一个小模块,在需要的时候调用,实现可重用。
(1)定义函数:封装
语法:
def 函数名():
函数封装的代码
……
一对括号和:号别忘记,函数命名规则同第4节变量的命名。
(2)调用函数:享受成果
语法:
函数名()
即在当前文件中调用很简单,通过函数名()即可调用;只有调用函数才能让函数执行,函数定义部分不会执行;必须先定义后调用。在实际实现中,调用函数结果的前提是必须在定义函数部分写上了返回值语句。
- 如定义封装九九乘法表为一个函数multiple_table(),并调用,之后保存在文件df_01_输出九九乘法表中:
def multiple_table(): # 如果不主动调用函数,函数是不会主动执行的
# 行的变量在循环体外赋值,列的在外层循环体内进行赋值
multi_1 = 1
while multi_1 <= 9:
multi_2 = 1
while multi_2 <= multi_1:
result = multi_1 * multi_2
print("%d * %d = %d" % (multi_2, multi_1, result), end = "\t")
multi_2 += 1
print("")
multi_1 += 1
multiple_table()
- 如在别的文件程序中调用上面文件中封装好的函数,则:
import df_01_输出九九乘法表
df_01_输出九九乘法表.multiple_table()
- 函数的注释:用成对出现的三个引号""" 函数注释 """ ,以后函数名出现时,使用ctrl+Q即可查看函数的注释
2)函数的参数和返回值
- 参数。在函数中,参数当变量使用,把希望函数处理的数据,调用时通过参数变量传递进去,语法如下:
def sum_2_num(num1, num2):
"""对两个数字求和"""
result = num1 + num2
print("%d + %d = %d" % (num1,num2,result))
sum_2_num(50, 20)
上面程序中,定义函数时的num1, num2是形参,调用函数时的50, 20是实参。
定义函数时,可以给某个参数设定一个默认值,即缺省值,如gl_list.sort(reverse=True)。指定缺省参数的默认值时,应该使用该参数最常见的值作为默认值。函数缺省函数定义如下
def print_info(name, gender=True):
gender_text = "男生"
if not gender:
gender_text = "女生"
print("%s是%s" % (name, gender_text))
print_info("小明") # 可以省去gender该参数值的传递
注意:1 带有默认值的参数在函数定义时必须在括号中的参数列表末尾,def print_info(gender=True, name):是错误的!2 如果有多个缺省参数,调用函数时需要指定参数名,这样解释器才能知道对应关系,如def print_info(name, title="", gender=True): ,调用时应该print_info("小明“, gender=Flase),而不是print_info("小明“, Flase)
在函数内部,无论参数是何种类型,使用赋值语句对参数进行赋值,函数执行后即释放内存,不会影响到函数外部对参数重新赋值后,外部对参数重新赋值的值的引用;但是函数内部通过操作方法对可变类型参数重新修改数据后,会改变参数外部的值。
- 多值参数。在函数中,如果一个参数接收的数据元素个数是不确定的,则使用多值参数。有两种多值参数:元组(在元组参数名前增加一个*,一般起名叫args),字典(参数名前增加两个**,一般起名**kwargs)。如def demo(name, *args, **kwargs):。元组和字典的拆包,需要在写调用函数语句时,在元组名前增加一个*,字典名前增加两个**。
- 返回值。只有函数内部使用了返回值,才能在定义函数外部的代码中使用其它变量调用并接收函数的结果。
def sum_2_num(num1, num2):
"""对两个数字求和"""
result = num1 + num2
return result
sum_result = sum_2_num(10, 20)
print("计算结果:%d" % sum_result)
一个函数执行后能返回多个结果。多个结果可以包装到元组中,此时返回的是一个元组,如return(temp, wetness),且小括号也可以省去,如return temp, wetness,但仍旧其实返回的是元组。可以使用多个变量,依次接收函数的返回结果,代码如gl_temp, gl_wetness = measure(),measure()是函数名。
3)函数的嵌套调用
一个函数内部调用另外一个函数。如:
def wdf1():
print("*" * 50)
def wdf2():
print("-" * 50)
wdf1()
print("+" * 50)
wdf2()
传递参数的例子:
def print_line(char, times):
"""打印单行分割线
:param char: 分割字符
:param times: 重复次数
"""
print(char * times)
def print_multilines(i, num, char, times):
"""打印多行分割线"""
while i <= num:
print_line(char, times)
i += 1
print_multilines(1, 5, "-", 20)
4)使用模块(工具包)中的函数
Python中,每一个.py程序文件都是一个模块。看上面第1)点中的最后一个例子。在同一Project下,一个源文件中定义的全局变量和函数,其它文件程序都可直接使用,但要使用import先导入文件名(模块名)。如下:
import df_06_分割线模块
df_06_分割线模块.print_multilines(1, 1, "-", 60) #使用模块中的变量或函数,只需要在模块名后加点,然后输入要使用的模块中的函数或变量
print(df_06_分割线模块. name) # df_06_分割线模块. name表示调用df_06_分割线模块文件中的name变量
5)递归函数
函数的递归指一个函数在其内部可以调用自己或其它函数。递归是一个编程技巧,在处理不确定的循环条件时格外有用。如遍历整个文件目录的结构。
定义递归函数,编写时首先必须写出口,即有终止递归的出口语句,应使用如下语句:
if ??:
return