Python第四弹:python进阶-匿名函数和内置函数

一、匿名函数

匿名函数: lambda表达式

语法:

lambda 参数1,[..参数2] : 返回值

python 复制代码
# 创建一个求和的匿名函数,并且计算 20+15
fn = lambda a, b : a + b
# 输出:35
print(fn(20,15))

二、内置函数

内置函数
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() import()
complex() hasattr() max() round() reload()
delattr() hash() memoryview() set()

常见分类

  • 数值计算: abs()round()min()max()sum()

  • 类型转换: int()float()str()list()tuple()

  • 迭代与函数式: code>map()、filter()zip()enumerate()

  • 反射与对象: type()isinstance()getattr()setattr()

  • 输入输出: print()input()open()

2.1 zip

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

列表的第0为放一起,第1位放一起。

python 复制代码
# 2.1 zip把列表元素按照位置合并为不同的元组列表
#    0      1       2
lst1 = ["赵本山", "潘长江", "苏有朋"]
lst2 = [40, 28, 36]
lst3 = ["乡村爱情", "举起手来", "情深深雨蒙蒙"]

lst = []
for i in range(len(lst1)):
    lst.append({lst1[i], lst2[i], lst3[i]})
# 输出:[{40, '乡村爱情', '赵本山'}, {28, '举起手来', '潘长江'}, {'苏有朋', '情深深雨蒙蒙', 36}]
print(lst)

# 采用zip实现此功能
result = zip(lst1, lst2, lst3)
# 输出:<zip object at 0x102dc6bc0>
print(result)
# 打印内容,转化为列表打印
# 输出:[('赵本山', 40, '乡村爱情'), ('潘长江', 28, '举起手来'), ('苏有朋', 36, '情深深雨蒙蒙')]
print(list(result))

2.2 作用域函数

2.2.1 locals函数

locals函数:函数以字典的类型返回当前位置的全局局部变量。

python 复制代码
# 2.作用域函数
# 2.1 locals() 函数会以字典类型返回当前位置的全部局部变量。
# 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。
# 输出: 
# {'__name__': '__main__', '__doc__': None, '__package__': None,
#  '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1008cfb70>,
#  '__spec__': None, '__builtins__': <module 'builtins' (built-in)>,
#  '__file__': '/Users/zhouronghua/WORK/DEV/projects/Python/进阶篇/匿名函数.py',
#  '__cached__': None, 'fn': <function <lambda> at 0x100a36400>,
#  'lst1': ['赵本山', '潘长江', '苏有朋'], 'lst2': [40, 28, 36],
#  'lst3': ['乡村爱情', '举起手来', '情深深雨蒙蒙'],
#  'lst': [{'赵本山', 40, '乡村爱情'}, {'举起手来', 28,, '潘长江'}, {'情深深雨蒙蒙', 36, '苏有朋'}],
#  'i': 2, 'result': <zip object at 0x100a43e00>}
print(locals())

2.2.2 globals函数

globals() 函数会以字典类型返回当前位置的全部全局变量。

python 复制代码
# 2.2 globals() 函数会以字典类型返回当前位置的全部全局变量。
print("打印globals结果")
# 输出:
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x104657b70>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/zhouronghua/WORK/DEV/projects/Python/进阶篇/匿名函数.py', '__cached__': None, 'fn': <function <lambda> at 0x104712f00>, 'lst1': ['赵本山', '潘长江', '苏有朋'], 'lst2': [40, 28, 36], 'lst3': ['乡村爱情', '举起手来', '情深深雨蒙蒙'], 'lst': [{40, '赵本山', '乡村爱情'}, {'举起手来', 28, '潘长江'}, {'情深深雨蒙蒙', 36, '苏有朋'}], 'i': 2, 'result': <zip object at 0x10471fe00>}
print(globals())

2.3 sorted函数

sorted() 函数对所有可迭代的对象进行排序操作。

2.3.1 sorted函数排序

sorted函数的语法:

python 复制代码
def sorted(
    iterable: Iterable[SupportsRichComparisonT], /, *, key: None = None, reverse: bool = False
) -> list[SupportsRichComparisonT]

参数说明:

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
python 复制代码
# sorted() 函数对所有可迭代的对象进行排序操作(升序)。
lst = [200,18,38,94,48]
# 调用sorted排序
print(f"排序前列表:{lst}")
lst2 = sorted(lst)
# 输出:排序后列表: [18, 38, 48, 94, 200]
print(f"排序后列表: {lst2}")
# 如果需要进行降序排列
# 排序后是否进行翻转
lst2 = sorted(lst, reverse=True)
# 输出:降序排序后列表: [200, 94, 48, 38, 18]
print(f"降序排序后列表: {lst2}")

2.3.2 sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

2.4 filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

python 复制代码
# filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象
# 过滤以张姓的人名
lst = ["张翠山", "赵敏", "张三丰", "杨逍"]
ret  = filter(lambda s:s.startswith("张") , lst)
# 输出:<filter object at 0x101238a60>
print(ret)
# 以列表方式打印
# 输出:['张翠山', '张三丰']
print(list(ret))
# 输出非张姓的人名呢?
ret  = filter(lambda s:not s.startswith("张") , lst)
# 输出:['赵敏', '杨逍']
print(list(ret))

2.5 map函数

map() 函数会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法

以下是 map() 方法的语法:

python 复制代码
map(function, iterable, ...)

参数

  • function -- 函数
  • iterable -- 一个或多个序列
python 复制代码
# 对列表中的数值元素计算平方根
lst = [4,25,16, 5, 36]
ret = map(lambda x: x**0.5, lst)
# 输出:<map object at 0x1044b7980>
print(ret)
# 输出:[2.0, 5.0, 4.0, 2.23606797749979, 6.0]
print(list(ret))
相关推荐
不瘦80斤不改名1 小时前
JavaScript 基础语法完全指南
开发语言·javascript·ecmascript
TE-茶叶蛋2 小时前
Java 8 引入的Stream API-stream()
java·windows·python
小陈的进阶之路2 小时前
Python系列课(9)——面向对象
开发语言·python
两年半的个人练习生^_^2 小时前
什么是内存泄漏?什么是内存溢出?
java·开发语言
曦夜日长2 小时前
C++ STL容器string(二):删除与插入、数据查找、自定义输入
java·开发语言·c++
jimy12 小时前
C语言中的inline function specifier(函数说明符、关键字)
c语言·开发语言
赏金术士2 小时前
Kotlin 协程底层原理(Continuation)详解
java·开发语言·kotlin
wen_zhufeng2 小时前
python-dotenv 使用文档
数据库·python·oracle
Str_Null2 小时前
杀戮尖塔通过修改记录文件和备份文件进行修改血量和金币
python