零碎积累 II
■global 关键字用于把跟着的变量声明为全局变量。在看似不属于其的命名空间里也可以引用它。
■讲一个一维列表二维化的方式,用简单的一行语句来表达:
- [[array[rows * y + cols]
- for cols in range(y)]
- for rows in range(x)]#array是一个一维列表(或者数组),x表示二维化后的行数,y表示列数
■想用 C,java 里面的 switch 语句结构,但是 python 里没有的时候,可以
1. 搞很多个 if 判断,不过这样很繁琐
2. 建立一个字典, key 是 switch 的各个 case 的值,而 value 写函数对象进行相应的操作
■关于在函数的参数前加 *,分成两个情况
1. 在定义函数的时候:需要知道的是, 很多场合下写的 * args,**kwargs 中的 args 和 kwargs 只是一种习惯,你可以把它换成其他变量名称,在函数中换那个名称引用就可以了。
一个 * 表示函数可以接受任意多个函数,它会把所有不是实名参数的参数整合成一个元组,并把其作为参数名代表的对象。比如:
- def test(paraA,paraB,*args):
- print paraA
- print paraB
- print type(args),args
- if __name__ == "__main__":
- test(1,2,3,4,5)
- #输出:
- 1
- 2
- 'tuple'> (3,4,5)
两个 ** 表示可以接受任意多个实名参数,即传参数的时候超过限额的部分也可以加上参数的名称了。而函数会把 kwargs 整合成一个字典供函数引用。比如:
- def test(paramA,paramB='B',**kwargs):
- print paramA
- print paramB
- print type(kwargs),kwargs
- if __name__ == "__main__":
- test(1,2,C=3,D=4,F=5)
- #输出
- 1
- 2
- 'dict'> {'C':3,'D':4,'F':5}
- test(1,2,3,4,5) #报错,参数个数不对
2. 调用函数时加上 *
当在调用函数时参数前加上 *,(这个参数通常是个 sequence 之类的 iterable 对象)意思是把参数值拆分成一个个小单元,并将小单元一一传递给函数作为参数。单元的个数和函数定义时要求的参数值一致。比如:
- def test(a,b,c):
- print "a:",a
- print "b:",b
- print "c:",c
- if __name__ == "__main__":
- test(*[1,2,3])
- #输出:
- a: 1
- b: 2
- c: 3
■说到函数的实名虚名参数问题,还有一个顺序问题需要注意。就是说在定义和使用时虚名参数一定要放在实名参数之前
def func(a,b,c=1) 正确
def func(a,b=1,c) 错误
■zip 函数
zip 函数接受包括 0 个在内任意多个 sequence 作为参数。将每个 sequence 的 [0] 组合成元组 1,[1]组合成元组 2........
最终返回的是 [元组 1, 元组 2, 元组 3....]
如果参数的长度参差不齐,那就以短的序列为标准,即长的序列多于最短的那个长度的那部分全部都舍去
■if 和 else 可以写在一行里
比较容易想到的是 [x for x in range(10) if x%2 == 0] 这样的列表生成器
这种列表表达式还可以接上 else:[x if x%2 == 0 else x*3 for x in range(10)] 相当于偶数原封不动输出,奇数乘以三
上面这种表达式的根源是类似后面这个表达式的用法 a if a>0 else -a (计算绝对值)
在函数的返回语句中大概可以通过这样的表达式来做一个最后的判断。return a if a > 0 else -a
■类里面可以出现一些常量,写在所有成员方法的外面,前面不用写 self.,但是调用的时候要用 self. 常量名调用。
比如:
- class test():
- class_dict = {"ip":"127.0.0.1"}
- def __init__(self):
- self.port = 8080
- def __str__(self):
- return self.class_dict.get("ip"),self.port
- print test()
- >>>127.0.0.1 8080
但是一般来说和 java 里面不一样,这些常量起的都是一些辅助作用
来源: http://www.bubuko.com/infodetail-1995074.html