python中的骚操作

Python的魅力

Python是一个给人持续惊喜的编程语言,在读python代码的时候,读着读着就会发现,python还可以这样使用。本文用来收集python 的奇葩语法的。

1. lambda语法

lambda 是一行没有名字的函数,也称为匿名函数,在C++中也有这种语法。其具体用法为:

1
lambda params:f(params)

例如

1
2
z = lambda x,y:(x+y)
z(1,2) ==>3

还有一些其他特殊用法如

1
2
a = [(1,2),(5,6),(3,4),(6,2)]
a.sort(key=lambda x:x[1])

列表并行排序

1
2
3
data = zip(list1, list2)
data = sorted(data)
list1, list2 = map(lambda t: list(t), zip(*data))

2. b if c else d

相当于C++中 c?b:d,可用于任何判断一个表达式,而取两个值得情况
如:

1
2
$ a = 46
$ print(a,"is","even" if a%2==0 else "odd")

3. a = [b for _ in range(c)]

1
2
3
4
forin … 产生的是一个generator,迭代生成一个列表,有趣的是可以与if else连用
l1 = [1,3,2,-1,-2,-3]
l2 = [x if x >0 else 0 for x in l1]
l2 = [1,3,2,0,0,0]

4. generator

深度剖析generator

5. python定义的系统标识符

  • 5.1 Class1.__name__ # 类型名称 ‘Class1’
  • 5.2 Class1.__module__ # 类型所在模块 ‘main
  • 5.3 Class1.__bases__ # 类型所继承的基类 (,)
  • 5.4 Class1.__dict__ # 类型字典,存储所有类型成员信息。
  • 5.5 Class1().__class__ # 类型
  • 5.6 Class1().__module__ # 实例类型所在模块 ‘main
  • 5.7 Class1().__dict__ # 对象字典,存储所有实例成员信息。 {‘i’: 1234}
  • 5.8 __repr__ #名称的官方输出
  • 5.9 __version__ 版本

6. __init__.py

放在文件夹内可以把文件夹名字作为类导入

7. map

map会根据给定的函数对指定的序列做映射
map(function, iterable)

1
2
3
4
5
6
7
8
9
10
11
>>>def square(x) :            # 计算平方数
... return x ** 2
...
>>> map(square, [1,2,3,4,5]) # 计算列表各个元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5]) # 使用 lambda 匿名函数
[1, 4, 9, 16, 25]

# 提供了两个列表,对相同位置的列表数据进行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]