首页 > 编程语言 >Python 之函数

Python 之函数

时间:2024-09-17 16:22:03浏览次数:12  
标签:函数 generator Python list next 参数 迭代

函数参数

  • 位置参数: def power(x):
  • 默认参数: def power(x, n=2): 默认参数必须指向不变对象!
  • 可变参数: def calc(*numbers):
  • 关键字参数: def person(name, age, **kw):
  • 命名关键字参数:def person(name, age, *, city, job):

参数组合:
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数

递归及尾递归优化

切片

迭代
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()。
通过collections模块的Iterable类型判断一个对象是否可迭代

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False

如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

>>> for i, value in enumerate(['A', 'B', 'C']):
...     print(i, value)
...
0 A
1 B
2 C

列表生成器

list(range(1, 11))
[x * x for x in range(1, 11)]
[x * x for x in range(1, 11) if x % 2 == 0]
[m + n for m in 'ABC' for n in 'XYZ']

>>> import os
>>> [d for d in os.listdir('.')] # os.listdir可以列出文件和目录
['.emacs.d', '.ssh', '.Trash', 'Adlm', 'Applications', 'Desktop', 'Documents', 'Downloads', 'Library', 'Movies', 'Music', 'Pictures', 'Public', 'VirtualBox VMs', 'Workspace', 'XCode']

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']

>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']

生成器:generator 不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制
方法一:只要把一个列表生成式的[]改成(),就创建了一个generator:

>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>

创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。我们可以直接打印出list的每一个元素,但我们怎么打印出generator的每一个元素呢?如果要一个一个打印出来,可以通过next()函数获得generator的下一个返回值:

>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
>>> next(g)
16
>>> next(g)
25
>>> next(g)
36
>>> next(g)
49
>>> next(g)
64
>>> next(g)
81
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

断调用next(g)实在是太变态了,正确的方法是使用for循环,因为generator也是可迭代对象:

>>> g = (x * x for x in range(10))
>>> for n in g:
...     print(n)
...

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。

迭代器

高阶函数
map/reduce
map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

filter: 用于过滤序列

sorted: 对list进行排序

返回函数

匿名函数

装饰器

def log(func):
    def wrapper(*args, **kw):
        print('call %s():' % func.__name__)
        return func(*args, **kw)
    return wrapper

偏函数
functools.partial

标签:函数,generator,Python,list,next,参数,迭代
From: https://blog.51cto.com/u_11365839/12037659

相关文章

  • python 提取出sql语句中where的值
    使用正则表达式来提取SQL语句中的WHERE条件的值。假设你的SQL语句格式比较标准,你可以使用以下Python代码来提取WHERE子句中的值。importredefextract_where_clause(sql_query):#使用正则表达式提取WHERE子句中的条件where_clause_pattern=re.compile(r'......
  • pikachu靶场的代码审计,和一些危险函数
    对pikachu靶场进行代码审计,审计分析文件上传、命令执行漏洞,越权漏洞,sql注入,xxe漏洞文件上传client:并未对后缀进行判断,只对大小做了验证后端并未进行文件的类型校验,仅仅是生成了一个目录去保存上传的文件同时对文件的保存路径暴露MIMEType只对mime进行了验证,很容易绕过......
  • [Python手撕]合并 K 个升序链表
    #Definitionforsingly-linkedlist.#classListNode:#def__init__(self,val=0,next=None):#self.val=val#self.next=nextclassSolution:defmergeKLists(self,lists:List[Optional[ListNode]])->Optional[ListNode]:......
  • C++信奥老师解一本通题 1370:最小函数值(minval)
    ​【题目描述】有n个函数,分别为F1,F2,...,Fn。定义Fi(x)=Ai*x*x+Bi*x+Ci(x∈N∗)。给定这些Ai、Bi和Ci,请求出所有函数的所有函数值中最小的mm个(如有重复的要输出多个)。【输入】第一行输入两个正整数n和m。以下nn行每行三个正整数,其中第ii行的三个数分别位Ai、Bi和Ci输入数......
  • C++面试考点:拷贝赋值运算符和拷贝构造函数有什么区别?
    定义和功能拷贝构造函数拷贝构造函数是一种特殊的构造函数,用于创建一个新对象,该新对象是作为另一个同类型对象的副本而创建的。其函数原型通常为类名(const类名&other)(在C++11之前,const也可省略)。例如:classMyClass{public:MyClass(constMyClass&ot......
  • 【C语言】函数与模块
    目录一、函数(Functions)1.1.函数的基本组成部分1.2.示例:一个简单的C函数1.3.函数调用和返回值二、模块(Modules)2.1.模块的基本构成2.2.C语言模块示例2.3.编译和链接三、使用场景3.1.函数的使用场景3.1.1.实现数学运算3.1.2.数据处理3.1.3.模块化编程3.1.......
  • 【高中数学/三角函数】设x,y为实数,若4x^2+y^2+xy=1,求2x+y的最大值?
    【问题】设x,y为实数,若4x^2+y^2+xy=1,求2x+y的最大值?【出处】《解题卡壳怎么办--高中数学解题智慧剖析》P38页第8题首问余继光、苏德矿著 【解答】由4x^2+y^2+xy=1配方得(2x+y/4)^2+15/16*y^2=1可设2x+y/4=cosθ,根号15/4*y=sinθ于是2x+y=cosθ-sinθ+4sinθ/根号15=2*根号10/5*s......
  • 用Python解决综合评价问题_模糊综合评价,决策树与灰色关联分析
    一:模糊综合评价模糊综合评价是一种有效的处理不确定性和模糊性的评价方法,特别是在人才评价等领域。它允许我们综合考虑多个评价指标,并给出一个综合的评价结果。以下是利用模糊综合评价对人才进行评价的步骤:确定评价指标:首先,我们需要确定用于评价人才的各种指标,例如专业技能......
  • python+flask计算机毕业设计基于微信小程序的综合旅游管理系统的设计与实现(程序+开题+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着移动互联网技术的飞速发展,人们的生活方式和消费习惯正经历着深刻的变革。旅游作为现代人休闲娱乐的重要方式之一,其服务模式和体验需求......
  • python+flask计算机毕业设计健身房管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着现代人生活节奏的加快和健康意识的日益增强,健身房作为促进全民健身、提升生活质量的重要场所,其管理与服务效率成为了行业关注的焦点。......