数据与列表元祖字符串
repr(x) 将对象x转换为表达式字符串
eval(str) 用来计算在字符串中的有效Python表达式,并返回一个对象
unichr(x) 将一个整数转换为Unicode字符
hex(x) 将一个整数转换为一个十六进制字符串
ceil(x) 返回数字的上入整数,如math.ceil(4.1) 返回 5
cmp(x, y) 如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1
floor(x) 返回数字的下舍整数,如math.floor(4.9)返回 4
pow(x, y) x**y 运算后的值。
round(x [,n]) 返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。
sqrt(x) 返回数字x的平方根,数字可以为负数,返回类型为实数,如math.sqrt(4)返回 2+0j
list.count(obj) 统计某个元素在列表中出现的次数
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.pop(obj=list[-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
len(dict) 计算字典元素个数,即键的总数
dict.fromkeys(seq[, value]) 该方法返回一个新字典 如果不指定value 则返回值为None的字典
dict.items() 返回可遍历的(键, 值) 元组列表
enumerate() 生成相应的enumerate型的对象
enum_obj = enumerate("abcd") # >>> 新建了一个enumerate型的对象 for index, ele in enum_obj: print(index, ele) # >>> 依次输出: 1 "a", 2 "b", 3 "c", 4 "d"
zip() 生成相应的zip型的对象,返回元祖列表 类似dict.items()
for i in zip("abcd", "1234"): print(i) # >>> 依次输出:("a", "1"), ("b", "2"), ("c","3"), ("d","4")
string.partition() 方法用来根据指定的分隔符将字符串进行分割,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符本身,第三个为分隔符右边的子串。partition() 的作用和split() 类似
str = "www.runoob.com" print str.partition(".") # ('www', '.', 'runoob.com')
string.join() 这实际上是一个连接函数,但我还是把它放在分割里面讲了。它的作用是以string为分隔符,将括号里面的字符串序列连接起来(注意,一定是字符串形式的序列,比如由字符串构成的列表等等),构成新的字符串。
print(",".join(["I", "wrote", "Python"])) # >>> "I,wrote,Python" print("**".join("123")) # >>> "1**2**3"
string.upper() 是转换成大写,string.title()是首字母大写
函数
使用lambda可以定义简单的单行匿名函数。lambda的语法是:
lambda args: expression #同时表达式(expression)的值就是匿名函数调用的返回值
lambda_add = lambda x, y: x + y print(lambda_add(1,2)) #返回3
这与使用def定义的求和函数完全一样,甚至可以将lambda表达式进行赋值传递
lambda_add = lambda x, y: x + y aaaaaa = lambda_add print(aaaaaa(1,2))
所以函数是可以被变量引用的,函数作为参数和返回值也是Python比较普遍的做法了,闭包就是一类特殊的函数
闭包: 如果一个函数定义在另一个函数的作用域中,并且函数中引用了外部函数的局部变量,那么这个函数就是一个闭包
def func(): n = 1 def inner(): print n inner() # 返回1 n = 'x' inner() # 返回"x" func()
函数inner定义在func()的作用域中,并且在inner中使用了func中的局部变量n,构成了一个闭包。闭包绑定了外部的变量,所以调用函数f的结果是打印1和'x'。
这类似于普通的模块函数和模块中定义的全局变量的关系:修改外部变量能影响内部作用域中的值,而在内部作用域中定义同名变量则将遮蔽(隐藏)外部变量。
闭包只有在作为参数和返回值时才能发挥它的真正威力
作为参数:
如果你对OOP的模板方法模式很熟悉,相信你能很快速地学会将函数当作参数传递。两者大体是一致的,只是在这里,我们传递的是函数本身而不再是实现了某个接口的对象。