Python函数与lambda 表达式(匿名函数)
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)
Python函数与lambda 表达式(匿名函数)的更多相关文章
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- java8函数式接口详解、函数接口详解、lambda表达式匿名函数、方法引用使用含义、函数式接口实例、如何定义函数式接口
函数式接口详细定义 函数式接口只有一个抽象方法 由于default方法有一个实现,所以他们不是抽象的. 如果一个接口定义了一个抽象方法,而他恰好覆盖了Object的public方法,仍旧不算做接口的抽 ...
- Python:lambda表达式(匿名函数)
lambda表达式: 通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数. 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方便. 在Python中 ...
- lambda表达式匿名函数
匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. C# 中委托的发展 在 C# 1.0 中,您通 ...
- lambda表达式 匿名函数
lambda函数是一种快速定义单行最小函数的方法,是从Lisp借鉴而来的,可以用在任何需要函数的地方. 基础 lambda语句中,冒号前是参数,可以有多个,用逗号分割:冒号右边是返回值. lambda ...
- C++中对C的扩展学习新增语法——lambda 表达式(匿名函数)
1.匿名函数基础语法.调用.保存 1.auto lambda类型 2.函数指针来保存注意点:[]只能为空,不能写东西 3.std::function来保存 2.匿名函数捕捉外部变量(值方式.引用方式) ...
- 第六天 函数与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, ...
- Kotlin语法(函数和lambda表达式)
三.函数和lambda表达式 1. 函数声明 fun double(x: Int): Int { } 函数参数是用 Pascal 符号定义的 name:type.参数之间用逗号隔开,每个参数必须指明类 ...
- 浅析匿名函数、lambda表达式、闭包(closure)区别与作用
浅析匿名函数.lambda表达式.闭包(closure)区别与作用 所有的主流编程语言都对函数式编程有支持,比如c++11.python和java中有lambda表达式.lua和JavaScript中 ...
- 12_Python的(匿名函数)Lambda表达式_Python编程之路
Python作为一门高级语言,与很多编程语言一样都具有匿名函数这一特征 匿名函数,也就Lambda表达式,通俗来讲就是不用命名的方法,直接定义,直接用即可 创建匿名函数需要用到Lambda关键字,下面 ...
随机推荐
- CF1560D Make a Power of Two 题解
Content 给定一个整数 \(n\).每次操作你可以做两件事情中的一件: 删去这个数中的一个数位(如果这个数只剩下一位,则可以把它删空). 在这个数的右边添加一个数位. 你可以以任意顺序执行无限次 ...
- java 网络编程基础 InetAddress类;URLDecoder和URLEncoder;URL和URLConnection;多线程下载文件示例
什么是IPV4,什么是IPV6: IPv4使用32个二进制位在网络上创建单个唯一地址.IPv4地址由四个数字表示,用点分隔.每个数字都是十进制(以10为基底)表示的八位二进制(以2为基底)数字,例如: ...
- java 多线程:Thread 并发线程: 方法同步synchronized关键字,与static的结合
1.方法内的变量是安全的 方法内定义的变量,每个变量对应单独的内存变量地址,多个线程之间相互不影响.多个线程之间的变量根本没有一毛钱关系 public class ThreadFuncVarSafe ...
- centos使用docker安装clickhouse
拉取镜像 docker pull yandex/clickhouse-server:20.3.12.112 启动 docker run -d --name=clickhouse-server -p 8 ...
- 【LeetCode】Integer to English Words 解题报告
Integer to English Words [LeetCode] https://leetcode.com/problems/integer-to-english-words/ Total Ac ...
- mac学习Python第一天:安装、软件说明、运行python的三种方法
一.Python安装 从Python官网下载Python 3.x的安装程序,下载后双击运行并安装即可: Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的. MAC 系统一般 ...
- AWS 15 年(1):从 Serverful 到 Serverless
2006年,AWS发布了其第一个Serverless存储服务S3和第一个Serverful计算服务EC2,这也是AWS正式发布的前两个服务,开启了云计算波澜壮阔的旅程.2014年,AWS发布了业界第一 ...
- Improving Adversarial Robustness via Channel-Wise Activation Suppressing
目录 概 主要内容 代码 Bai Y., Zeng Y., Jiang Y., Xia S., Ma X., Wang Y. Improving adversarial robustness via ...
- Kernel PCA and De-Noisingin Feature Spaces
目录 引 主要内容 Kernel PCA and De-Noisingin Feature Spaces 引 kernel PCA通过\(k(x,y)\)隐式地将样本由输入空间映射到高维空间\(F\) ...
- MarkDown 使用方法
MarkDown学习 标题的使用 在MarkDown中标题的使用,是用#+空格+标题名称,来进行编辑的.一个#就是一级标题, 两个#就是两级标题,以此类推,一定要加空格,否则无效 ### 三级标题 ...