Python3自己瞎学(1)

本文深入探讨Python编程的高级特性,包括标识符规则、保留字符、匿名函数lambda、递归与闭包、柯里化及反柯里化、内置高阶函数等。通过实例解析,帮助读者掌握更复杂的编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础内容就不记了,主要为细节补充内容。

目录

1、标识符问题

2、保留字符的查看代码

3、匿名函数 lambda

4、递归和闭包

5、柯里化与反柯里化 

6、常用的内置高阶函数

参考文献


1、标识符问题

(1)以单下划线开头的:(例_foo):代表不能随意访问的类属性,提醒该成员可看作是私有属性,如果真的访问了也不会出错,但不符合规范。

(2)以双下划线开头的:(例__foo):代表类的私有成员。私有成员只能在类的内部进行调用,无法在类的外部直接访问。

(3)以双下划线开头和结尾:(例__foo__):代表python里特殊方法专用的标识。例如__init__()表示类的构造函数,__version__表示所调用包的版本信息。

2、保留字符的查看代码

import keyword
keyword.kwist

3、匿名函数 lambda

匿名函数 lambda 仅由单条语句组成,该语句执行的结果就是返回值。使用匿名函数省略了 def 定义函数的步骤,没有名称属性,所以叫匿名函数。

匿名函数的一般形式如下:

lambda [参数1 [参数2,...,参数n]]:表达式
# 例程:对指定的列表求平方
def universal(list_name,func):
    return [func(x) for x in list_name]
a = [1,2,3,4]
b = universal(a,lambda x:x**2)
print(b)

lambda 函数能接收任意数量的参数但是只返回一个表达式的值,不能同时包含命令或多个表达式,调用函数时不占用栈内存从而增加运行效率。

4、递归和闭包

函数内部可以调用其他函数。如果一个函数在内部调用自身,这个函数就是递归函数(recursive function)。递归函数定义简单,逻辑清晰,但其效率不是很高。另外对函数还应该有一个明显的结束或收敛条件。

# 例程:求1+...+n的和
def addn(n):
    if n == 1:    # 结束条件
        return 1
    return n+addn(n-1)
# 调用
addn(100)

闭包(closure)是由其他函数生成并返回的函数。即调用一个函数,这个函数返回一个在这个函数中定义的函数。闭包最明显的特征就是被返回的函数可以访问其创建者局部命名空间中的变量,即使其创建者已经执行完毕,闭包仍能继续访问其创建者的局部命名空间。

# 例程
# 闭包执行完后,仍然能保持住当前的运行环境
# 注意书写的缩进和冒号
def counter(name):
    c = [0]
    def count():
        c[0] += 1
        if c[0] == 1:print ('This is the','1st','access to',name)
        elif c[0] == 2:print ('This is the','2nd','access to',name)
        elif c[0] == 3:print ('This is the','3rd','access to',name)
        else: print ('This is the',repr(c[0]) + 'th access to',name)
    return count
# 测试1 
print('This is Test1')
a = counter('example');a();a();a();a()
# 测试2 
print('This is Test2')
a = counter('sample');a();a()    # 对象a重新赋值后返回初始状态
# 测试3
print('This is Test3')
a = counter('example');a()

其实这里讲的不是很清楚,看完也是迷迷糊糊,贴一个比较好的:

https://www.cnblogs.com/JohnABC/p/4076855.html

5、柯里化与反柯里化 

柯里化(currying)是指一个函数在参数传递时返回另一个函数,该返回函数的参数就是原函数没有进行参数传递的参数,柯里化能泛化出很多函数。

其实不是很确定柯里化和反柯里化有什么用,猜测应该就是可以对一个人家已经写好的函数进行利用然后泛化出自己需要的函数吧,想想确实蛮简单的。不用自己费力再写一个少参数或多参数同功能的函数了。

# 函数的柯里化
def power(x,y):
    return x**y
# 测试程序
print (power(2,3))
# 将参数y进行柯里化
powerof2 = lambda y:power(2,y)    # 柯里化泛化出来的函数为 powerof2
# 测试柯里化之后的函数powerof2
powerof2(5)
# Python 内置 functools 模块的 partial 函数也可以实现柯里化
from functools import partial
powerof_2 = partial(power,2)
powerof_2(5)

反柯里化是将多个只含单个参数的函数模拟成一个多参数函数。

# 反柯里化,其实是闭包的方法
def power(x):
    def p(y):
        return x**y
    return p
power (2) (5)

6、常用的内置高阶函数

高阶函数就是能够接收函数作为参数的函数。

filter(布尔函数,序列) :调用一个布尔函数来遍历序列中的每个元素,返回一个使布尔函数值为true的迭代器。

map(func函数,序列1[,序列2,...]):将指定函数作用于给定序列的每个元素,并返回迭代器。

reduce(func函数,序列[,初始值]):将func函数用于序列的元素,连续将现有结果和下一个元素作用在随后的结果上,最后将简化序列为一个单一的返回值。

函数具体干嘛的就自己用到的时候去找吧。

参考文献

阮敬,《Python数据分析基础》,中国统计出版社,2018年8月

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天狭鬼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值