python 函数关键

避免可变参数修改

如果不想要函数内部在原处的修改影响传递给它的对象,那么我们可以建立一个明确的拷贝。

L = [1,2]
charger(x,L[:])

也可以把L强制转换成tuple

参数匹配原则

  • 在函数调用种,参数必须按照:位置参数,后面跟任何关键字参数和*sequence形式的组合,后面跟 **dict形式。
  • 在函数头部,参数必须按照:任何一般参数,默认参数(name = value),*name形式,后面跟着任何name = value keyword-only参数,之后再跟 **name形式

无论是函数调用还是函数定义,** 必须放在最后面

从语法上讲,keyword-only参数跟在name 后面。也可以在参数中直接放置 , 表示函数不会接受一个变长长度的参数列表。

func(a ,* ,b,c)
func(1 , b = 1 ,c =2 )

也可以对keyword-only参数添加默认值,这样在调用的时候就可以不用写参数,如果要写的话必须用keyword-only形式。

在调用中,keywork-only必须在之前,也可以在 里面,如:

def func(a,*b ,c = 7, **d ): pass
func(1,*(2,3),**{c = 5, x = 3, e = 6})

函数间接调用

函数可以作为参数,可以放置入container里面,也可以作为返回值,工厂模式就是一个典型的函数作为返回值。

函数注解

python为声明注解提供了特殊的语法,但是它本身不做任何事情;注解完全是可选的,并且,出现的时候只是直接附加到函数对象的annotatiaons属性以供其他用户使用

对于参数,它们的出现紧随参数名之后的==冒号==之后;对于返回值,它们紧随参数列表之后的 ==->== 之后,eg:

def func(a:'span',b:(1,10))-> int:
    return a+b
print(func.__annotations__)
{'a': 'span', 'b': (1, 10), 'return': <class 'int'>}

注意:注解里面也可以添加默认值,这个时候:出现在默认值之前,eg:
def func(a:'span' = 10 ,b:(1,10) = 2)-> int

lambda表达式

syntax:
lambda:arg1, arg2,…argn:expression using arguments

lambda与函数的用法是相同的,但是也有区别

  • lambda能够出现在def不能出现的地方,比如在列表常量中或者函数调用的参数中,另外lambda返回了一个值,可以选择性的赋值给变量,def总是在头部将新的函数赋值给一个变量,而不是作为返回值。
  • lambda的功能比def小,它只是一个表达式而不是代码块,仅仅能够在lambda主题中封装有限的逻辑,if语句不能够在里面使用。他是一个为编写简单的函数而设计的,def用来处理更大的任务。

在lambda中也支持默认参数

map、filter函数

map函数会对一个序列对象中的每一个元素应用被传入函数,,并返回一个迭代器(在3.x),这样会减少for循环的使用。

它也有更高级的用法,对于多个序列,

pow(3,4)
81
list(map(pow, [1,2],[2,3])
1  8
list(filter(lambda x:x>0),range(-5,5))
[1,2,3,4]

迭代器之生成器

首先得理解生成器的作用,是在需要的时候才产生结果,而不是直接产生结果,也就是延迟结果的创建。有两种方式:
- 生成器函数:使用yield语句一次返回一个结果,在每个结果之间挂起和继续他们的状态。
- 生成器表达式,类似列表解析,但是它返回是按需产生结果的一个对象,而不是构建整个列表。

生成器表达式
g = (x for x in range(6))这就是一个生成器表达式,与list不同的是它用()表示。

列表解析和生成器是比较常见的,在python3中还可以有:集合解析和字典解析
- 对于集合,{1,2,3}等同于set([1,2,3]),并且新的集合解析语法{f(x) for x in S if p(x)}就像生成器表达式set(f(x) for x in S if p(x)),其中f(x)是一个任意表达式。
- 对于字典,新的字典解析语法{key:val for (key,val) in zip(keys ,vals)}像dict{zip(keys,vals)}形式一样工作,并且{x:f(x) for x in items}像生成器表达式dict((x,f(x)) for x in items)一样工作。

默认参数和可变对象

默认参数是在def语句运行时评估并保存的,而不是在函数调用时。从内部来讲,python会将每一个默认参数保存成一个对象,并附加在这个函数本身。如果有必要的话,它能够在整个作用域内保存值,默认参数在调用之间都保存了一个对象,必须对修改可变的默认参数十分小心。eg:

def f(x = []):    #save away a list object
    x.append(1)   #changes same object each time 
    print(x)

saver([2])    #default not used
[2,1]

saver()    #default used
[1]

saver()   #grows on each call
[1,1]

saver()
[1,1,1]

如果不需要这种行为可以

def f(x = None):    #save away a list object
    if x is None:
        x = []     #same as x = x or []
    x.append(1)   
    print(x)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值