Python 奇葩语法

    xiaoxiao2022-06-23  26

    a = 1, 2, 3 赋值后的结果,a == (1, 2, 3),将一个元组(tuple)赋给了变量 a(1, 2) + (3, ) ⇒ (1, 2, 3),并不能说明 tuple 可以添加新的元素,而是重新开辟了新的内存空间; 之所以 l.extend(4) 类型错误,而 l.extend('c') 没有问题,在于字符串是可迭代对象,且 Python 中不区分单个字符与字符串的区别,均是字符串。

    0. 输出 vs. 返回值

    注意输出与返回值之间的关系

    >> s = range(5) >> [print(i) for i in s] 0 1 2 3 4 Out[2]: [None, None, None, None, None]

    1. tuple?

    >> m = (1) >> m 1 >> m = (1, ) >> m (1, ) # tuple 类型 >> m = 1, >> m (1, )

    2. append

    >> l = [] >> l.append(None) >> len(l) 1

    3. 输出百分值

    >>> print('%i%%'%(10)) 10% >>> print('{0}%'.format(10)) 10%

    4. 返回元组

    def foo(): return 1, 2 # return (1, 2) x = foo() # 此时x是元组((1, 2)), x, y = foo() # 此时x是元组的第一个元素((1)) # 颇有几分自动类型推导的意思

    接着捣蛋:

    def foo(): return 1, 2, 3 x = foo() # 编译通过 x, y, z = foo() # 编译通过 x, y = foo() # 编译不通过,未定义行为,编译器不知如何进行元组的分配

    Python LEGB规则

    0. 变量的作用域

    num = 9 def f1(): num = 10 def f2(): print(num) f2() f1() f2()

    输出为:

    9 9

    num 不是全局变量,但对全体函数是可见的,每个函数都会得到 num 拷贝,如果想在函数内部对 num 进行修改,需要用 global 进行修饰。

    num = 9 def f1(): global num num = 10 def f2(): print(num) f2() f1() f2() 9 10

    1. map(None, [1, 2, 3], [4, 5, 6])

    >> map(None, [1, 2, 3], [4, 5, 6]) [(1, 4), (2, 5), (3, 6)] >> map(None, [1, 2, 3], [4, 5, 6], [7, 8, 9]) [(1, 4, 7), (2, 5, 8), (3, 6, 9)]

    map 的第一个参数为函数对象,后续的全部参数有一种 zip 的含义在。

    2. not

    首先需要明确的一点,not 作用之后的结果为 False/True,

    >> [not i for i in (-3, -2, -1, 0, 1, 2, 3)] [False, False, False, True, False, False, False] >> not 0 True >> not None True >> not [] True

    3. def f(a, l=[]):有状态的函数

    def f(a, l=[]): l.append(a) return l print f(1) # [1] print f(2) # [1, 2] print f(3) # [1, 2, 3]

    4. l1[2:2] = l2

    >> l1 = [1, 2, 3, 4] >> l2 = [20, 30, 40] >> l1[2:2] = l2 >> l1 [1, 2, 20, 30, 40, 3, 4] # 实现了插入

    5. 元组可变不可变?

    >> t = ([1, 2], 3, 4) >> id(t) 3070311756L >> t[0][1] = 20 >> t ([1, 20], 3, 4) >> id(t) 3070311756L

    6. 字典合并

    <a href=“http://www.pythoner.com/13.html”, target="_blank">Python中如何实现两个字典合并

    >> d1 = {'a':1, 'b':2} >> d2 = {'b':10, 'c':3}

    法 1:

    d3 = dict(d1.items() + d2.items())

    该法用时较长,效率不高;

    法 2:

    d3 = dict(d1, **d2)

    这种方法使用的是dict()工厂方法(Python 2.2 以上版本),

    法 3:

    d3 = d1.copy() d3.update(d2)

    据 Python 核心编程一书所说,从已存在字典中生成新字典的方式dictNew = dict(dictOld)叫内建方法dictNew = dictOld.copy()会慢一些。

    7. 参数与关键字参数

    def T(Name): def TT(**kwargs): print Name print kwargs return TT T(1)(Name=2) # 1 # {'Name': 2}
    转载请注明原文地址: https://ju.6miu.com/read-1123559.html

    最新回复(0)