Python函式
一、函式的作用
-
函式是组织好的,可重复使用的,用来实作单一或相关联功能的代码段
-
函式能提高应用的模块性和代码的重复利用率
-
python 内置函式:https://docs.python.org/zh-cn/3.8/library/functions.html
二、函式的定义
def function_name([parameter_list]): [''' comments '''] [function_body]
-
def:函式定义关键词
-
function_name:函式名称
-
():自变量串列放置的位置,可以为空
-
parameter_list:可选,指定向函式中传递的自变量
-
comments:可选,为函式指定注释(如何打印函式中的注释)
-
function_body:可选,指定函式体
"""函式的定义""" """ def function_name([parameter_list]): [''' comments '''] 注释 [function_body] 函式体 """ # 定义函式,自变量为空(注意缩进) def function_demo(): # 不要忘记冒号 print("我是一个函式") # [function_body] 函式体 # 定义函式,含有自变量,注释 def func_with_params(a, b, c): """ 这是一个携带自变量和注释的函式 ---> comments """ print(f"传入的自变量为:a={a},b={b},c={c}") # 打印函式comments(注释) # 1、__doc__ 打印出注释 print(func_with_params.__doc__) # func_with_params()---->()没有括号 # 2、help 打印函式和注释 help(func_with_params) # func_with_params()---->()没有括号 # 空函式 (函式体未想好/功能暂时没想好怎么写) # 1、pass def filter_char(s): pass # 2、comments def filter_char1(c): """ 功能:过滤铭感词 """
三、定义函式的注意事项:
-
缩进:python 是通过严格的缩进来判断代码块儿
-
函式体和注释相对于 def 关键字必须保持一定的缩进,一般都是 4 个空格
-
pycharm 自动格式化快捷键:
ctrl+alt+L
-
-
定义空函式
-
使用
pass
陈述句占位 -
写函式注释 comments
四、函式的呼叫
function_name([parameter_value]) # function_name:函式名称 # parameter_value:可选,指定各个自变量的值
"""函式的呼叫""" # 无参函式呼叫 function_demo() # 有参函式呼叫 func_with_params(1, 2, 3)
五、函式自变量的使用
-
形式自变量:定义函式时,函式名称后面括号中的自变量
-
实际自变量:呼叫函式时,函式名称后面括号中的自变量
"""函式自变量的使用""" # 1、形式自变量:定义函式时,函式名称后面括号中的自变量 def demo(a, b, v): # a, b, v print(f"传入的自变量为:a={a},b={b},c={v}") # 2、实际自变量:呼叫函式时,函式名称后面括号中的自变量 demo(1, 2, 4) # 1,2,3实际自变量
1、位置自变量
-
数量必须与定义时一致
-
位置必须与定义时一致
"""位置自变量""" def demo(a, b, v): print(f"传入的自变量为:a={a},b={b},c={v}") # 1、正确的 demo(1, 2, 3) # 2、错误的例子,数量少了 # demo(1, 45) # 有一个黄色提示 系统提示:TypeError: demo() missing 1 required positional argument: 'v' # 3、错误的例子,数量多了 # demo(1, 2, 3, 4) # 有一个黄色提示 系统提示:TypeError: demo() takes 3 positional arguments but 4 were given def person(name, age): print(f"姓名{name}") if age > 18: print(f"{name}已成年") else: print(f"{name}未成年") # 4、顺序错 # person(22, 'tom') # TypeError: '>' not supported between instances of 'str' and 'int' # 5、正常 person('jack', 28)
2、关键字自变量
-
使用形式自变量的名字确定输入的自变量值
-
不需要与形式自变量的位置完全一致
"""关键字自变量""" def person(name, age): print(f"姓名:{name}") if age > 18: print(f"{name}已成年") else: print(f"{name}:未成年") person(age=25, name='杨幂')
3、设定默认自变量
-
定义函式时可以指定形式自变量的默认值
-
指定默认值的形式自变量必须放在所有自变量的最后,否则会产生语法错误
-
param=default_value
:可选,指定自变量并且为该自变量设定默认值为 default_value -
注意:给形式自变量设定默认值,默认值要用不可变物件(整数型、浮点型、元组、布林值、字符串),用可变物件(字典,串列),默认值可能会催着呼叫发生变化
# 注意:给形式自变量设定默认值,默认值要用不可变物件(整数型、浮点型、元组、布林值、字符串),可变物件(字典,串列) # 错误示范,默认值为空串列 def wrong_demo2(a, b, c=[]): c.append(a) c.append(b) print(a, b, c) wrong_demo2(1, 2) wrong_demo2(3, 4) """设定默认自变量""" def person(name, age, international='中国'): print(f"姓名:{name}") print(f"国籍为{international}") if age > 18: print(f"{name}已成年") else: print(f"{name}:未成年") person(name='jace', age=30) person(name='tom', age=25, international='美国') # 错误的,默认值没有放在最后 def age(a=18, c, b): age(c, b) # 系统报错:SyntaxError: non-default argument follows default argument
4、可变自变量
-
可变自变量也称为不定长自变量
-
传入函式中实际自变量可以是任意多个
-
常见形式()
-
*args
接收任意多个实际自变量,并将其放到一个元组中
使用已经存在的串列或元组作为函式的可变自变量,可以在串列的名称前加
*
-
**kwargs
接收任意多个类似关键字自变量一样显式赋值的实际自变量,并将其放到一个字典中
使用已经存在字典作为函式的可变自变量,可以在字典的名称前加
**
# *args 接收任意多个实际自变量,并将其放到一个元组中 # 函式定义中的*args相当于打包 def print_language(*args): print(args) for a in args: print(a) # 呼叫函式,把不同数量的自变量传递进去,用位置自变量 # print_language('python', 'java') # print_language('python', 'java', 'php', "go") # 函式呼叫时*args相当于解包 lis = ['python', 'java', 'php', "go"] # 相当于 print_language('python', 'java', 'php', "go") print_language(*lis) # **kwargs 接收任意多个类似关键字自变量一样显式赋值的实际自变量,并将其放到一个**字典**中 # 函式定义中的**kwargs相当于打包 def print_info(**kwargs): print(kwargs) for a in kwargs.items(): print(a) print_info(tom=18, jack=24) print_info(tom=18, jack=24, Aice=25) # 函式呼叫时**kwargs相当于解包 di = {'cat': 18, 'jace': 24, 'alict': 65} print_info(**di)
六、函式回传值
def function_name([parameter_list]): [''' comments '''] [function_body] return [value] # value:可选,指定要回传的值 """函式回传值""" # 定义加法函式 def sum(a, b): result = a + b # 函式回传值 # return result, a, b # 回传保存元组 r = sum(1, 2) print(r)
lambda 表达式(匿名函式)
1、使用场景
-
需要一个函式,但是又不想费神去命名这个函式
-
通常在这个函式只使用一次的场景下
-
可以指定短小的回呼函式
2、语法
result = lambda [arg1 [, arg2, .... , argn]]: expression
-
result:呼叫 lambda 表达式
-
[arg1 [, arg2, …. , argn]]:可选,指定要传递的自变量串列
-
expression:必选,指定一个实作具体功能的表达式
# 常规写法 def circle_area(r): """ 计算圆的面积 r:半径 """ result = math.pi * r ** 2 return result r = 10 print(f"半径为{r}的面积为{circle_area(r)}") # lanbda表达式 # result = lambda 自变量 : expression result = lambda r: math.pi * r ** 2 print(f"半径为{r}的面积为{circle_area(r)}") # 对获取到的信息进行排序 book_info = [ ('python', 15), ('javn', 100), ('软件测验基础', 25) ] print(book_info) # 指定规则排列 # lambda x: (x[1]) 回传了串列中每 book_info.sort(key=lambda print(book_info)
本文来自博客园,作者:{jiuyou-emperor},转载请注明原文链接:{https://www.cnblogs.com/jiuyou-emperor/}
0 评论