Python函数

一、函数的作用

二、函数的定义

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)

Python函数与lambda 表达式(匿名函数)的更多相关文章

  1. [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

    函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...

  2. java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口

    函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...

  3. Python:lambda表达式(匿名函数)

    lambda表达式: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中 ...

  4. lambda表达式匿名函数

    匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. C# 中委托的发展 在 C# 1.0 中,您通 ...

  5. lambda表达式 匿名函数

    lambda函数是一种快速定义单行最小函数的方法,是从Lisp借鉴而来的,可以用在任何需要函数的地方. 基础 lambda语句中,冒号前是参数,可以有多个,用逗号分割:冒号右边是返回值. lambda ...

  6. C++中对C的扩展学习新增语法——lambda 表达式(匿名函数)

    1.匿名函数基础语法.调用.保存 1.auto lambda类型 2.函数指针来保存注意点:[]只能为空,不能写东西 3.std::function来保存 2.匿名函数捕捉外部变量(值方式.引用方式) ...

  7. 第六天 函数与lambda表达式、函数应用与工具

    一.函数 1.匹配 位置匹配 def func(a,b,c): print(a,b,c) func(c=1,a=2,b=3) 2 3 1 def func(a, b=2, c=3): print(a, ...

  8. Kotlin语法(函数和lambda表达式)

    三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...

  9. 浅析匿名函数、lambda表达式、闭包(closure)区别与作用

    浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...

  10. 12_Python的(匿名函数)Lambda表达式_Python编程之路

    Python作为一门高级语言,与很多编程语言一样都具有匿名函数这一特征 匿名函数,也就Lambda表达式,通俗来讲就是不用命名的方法,直接定义,直接用即可 创建匿名函数需要用到Lambda关键字,下面 ...

随机推荐

  1. 预算(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 预算是件重要的事,不然银几一花没边了,那结果可是要牺牺的(以下省略具体描述9^323字) 在Project里做预算,步骤不 ...

  2. java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多

    java nio 写一个完整的http服务器  支持文件上传   chunk传输    gzip 压缩      也仿照着 netty处理了NIO的空轮询BUG        本项目并不复杂 代码不多 ...

  3. HSPICE 电平触发D触发器仿真

    一. HSPICE的基本操作过程 打开HSPICE程序,通过OPEN打开编写好的网表文件. 按下SIMULATE进行网表文件的仿真. 按下AVANWAVES查看波形图(仿真结果). 二. 网表文件结构 ...

  4. LuoguB2034 计算 2 的幂 题解

    Content 给定整数 \(n\),求 \(2^n\). 数据范围:\(0\leqslant n<31\). Solution 第一种各位都能想得到的,直接循环 \(n\) 次,往答案里面乘以 ...

  5. Java面向对象~类和对象&方法,类方法

    面向对象 概念:     1.同一类事物的抽象描述,不是具体的    2.类和对象的关系:        类 是抽象的.        对象 是具体的.    3.对象的体征,称为"属性&q ...

  6. iframe父子页面js之间的调用

    父级页面:mian.html 子页面1:top.html 子页面2:index.html 页面关系 <div onclick="_top()">调用contentTop ...

  7. ubuntu下AF_INET和AF_INET6的值

    关于 演示环境 $ uname -a Linux xxxxxxx 5.4.0-47-generic #51-Ubuntu SMP Fri Sep 4 19:50:52 UTC 2020 x86_64 ...

  8. 【LeetCode】333. Largest BST Subtree 解题报告(C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  9. 【LeetCode】148. Sort List 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  10. MADE: Masked Autoencoder for Distribution Estimation

    目录 概 主要内容 代码 Germain M., Gregor K., Murray I. and Larochelle H. MADE: Masked Autoencoder for Distrib ...