Python内置功能函数详解

Python内置功能函数详解

是一种面向对象、直译式计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定。这种语言具有非常简捷而清晰的语法特…

abs

第一个是abs

print ‘abs(-10):’

print abs(-10)

print ‘abs(-2.3):’

print abs(-2.3)

print ‘abs(1+1j):’

print abs(1+1j)

结果是:

abs(-10)

10

abs(-2.3)

2.3

abs(1+1j)

1.41421356237

这个体现了函数的多态啊。整数,浮点数,复数进行了不同的处理。功能强吧。

ord 和 chr

第二个是ord和chr

print ‘the ASCII code of Z’

print ord(‘Z’)

print ‘the ASCII code of 90′

print chr(90)

结果是

the ASCII code of Z

90

the ASCII code of 90

Z

如果给ord的 是多于一个字符的字符串,那么会有异常给你看。如果给chr的参数不在0到255的 范围内,也会有异常的。

str, dict, tuple和 list

其实这些都不是内置函数了,如果从传统观点来说,应该是构造函数才对。str用 来构造一个新的字符串,dict用来构造字典,list用来构在序列。

org_str = ‘hello’

new_str = str(org_str)

print org_str, new_str

org_dict = {‘phone’:68942443, ‘qq’:81711392}

new_dict = dict(org_dict)

new_dict['qq']=0

print org_dict, new_dict

another_dict = org_dict

another_dict['qq']=0

print org_dict, another_dict

org_list = [1,2,3]

new_list = list(org_list)

new_list[0] = 4

print org_list, new_list

输出

hello hello

{‘qq’: 81711392, ‘phone’: 68942443} {‘qq’: 0, ‘phone’: 68942443}

{‘qq’: 0, ‘phone’: 68942443} {‘qq’: 0, ‘phone’: 68942443}

[1, 2, 3] [4, 2, 3]

可见,用构造函数产生 新的对象然后在赋值是真正的拷贝,如果直接赋值就是同一个名称绑定到了同一个对象之上了。对于字符串,由于字符串是不可改变的,所以其实两个东西还是指向 了一个对象,并没有发生想象中的拷贝过程。
cmp

print ‘cmp(1,2)’

print cmp(1,2)

print ‘cmp(1,1)’

print cmp(1,1)

print ‘cmp(2,1)’

print cmp(2,1)

print ‘cmp(1.2,2)’

print cmp(1.2,2)

print “cmp(‘a’,'b’)”

print cmp(‘a’,'b’)

print “cmp(‘ab’,'ac’)”

print cmp(‘ab’, ‘ac’)

结 果是:

cmp(1,2)

-1

cmp(1,1)

0

cmp(2,1)

1

cmp(1.2,2)

-1

cmp(‘a’,'b’)

-1

cmp(‘ab’,'ac’)

-1

divmod

a = 10

b = 3

print a/b

print a%b

print divmod(a,b)

结果 大家都猜得到:

3

1

(3, 1)

需要一个divmod我猜的原因是汇编中能够同时算出商和模,所以用一 个这样的函数可以提高效率,免得同时需要商和模的 时候算两次。充分体现了python能够返回两个返回值的好处啊,其实返回的是一个tuple
hex 和 oct

val = int(raw_input(‘input a value in decimal:’))

print ‘converted to hex’

print hex(val)

print ‘converted to oct’

print oct(val)

运行结果是:

input a value in decimal:123

converted to hex

0x7b

converted to oct

0173

需要注意hex和oct返 回的是字符串,而且hex返回的前缀是0x,而oct的 前缀是0。在python中,如果你在数字前面加了0或者0x就表 示了它们分别是8进制和十六进制表示的
int, long 和 float

a = ’1′

a_val = int(a)

b = ’1.1′

b_val = float(b)

print a_val+b_val

结果是

2.1

long 和int其实差不多,其实应该说int当数字太大的时候会调用long。 用int就好了,无所谓。

int还能把字符串解释为不同的进 制来进行转换,比如

int(’12′, 16)会得到18,但是你不能:

int(’0×12′),这个是不行的。

如果不 用int和float把字符串编程数字,那么是无法作加法的。如果字符串是无法转换的那种,则会给出异常:

ValueError: invalid literal for int()

有可能会把eval也 给扯进来,但是eval是把字符串当作python的源代码来看,尝试进行解释执行。和int和float单纯的类型转换的本意想去太远了。
input 和 raw_input

a = input(‘a string to eval:’)

print a

a = raw_input(‘a string:’)

print a

a = eval(raw_input(‘a string then eval:’))

print a

我给了几个输入,结果是:

a string to eval:1+2

3

a string:1+2

1+2

a string then eval:1+2

3

特 别注意,input由于是调用了eval的raw_input,如果用于用户输入是不安全的。因为输入一句就会被当作源代码来执行,那就是很大的安全漏洞 了。还是能用raw_input就用raw_input。
len, max 和 min

a_list = [1,3,4,6,7]

print a_list

print ‘length:’,len(a_list)

print ‘max:’, max(a_list)

print ‘min:’, min(a_list)

a_tuple = (1,2,3)

print a_tuple

print ‘length:’, len(a_tuple)

print ‘max:’, max(a_tuple)

print ‘min:’, min(a_tuple)

a_string = ‘hello’

print ‘length:’, len(a_string)

print ‘max:’, max(a_string)

print ‘min:’, min(a_string)

a_dict = {‘hello’:'hello!’, ‘how are you’:'fine’}

print ‘length:’, len(a_dict)

print ‘max:’, max(a_dict)

print ‘min:’, min(a_dict)

运行结果是:

[1, 3, 4, 6, 7]

length: 5

max: 7

min: 1

(1, 2, 3)

length: 3

max: 3

min: 1

length: 5

max: o

min: e

length: 2

max: how are you

min: hello

很明白的。只是对于dict来 说,比较大小的只是key,value不参加的。
filter, map, sum, zip 和 reduce

这几个函数是很 有名的:

def my_filter(val_in_list):

if val_in_list < 5:

return False

else:

return True

def my_map(val_in_list):

return val_in_list**2

print filter(my_filter, [1,2,3,6,7])

print map(my_map, [1,2,3])

结果是:

[6, 7]

[1, 4, 9]

就是定义一个自己的函 数,接收从list中取出的每个值。然后filter是这样的:

如 果希望这个值继续存在在过滤之后的list中,返回”True,否则返回false

而map是 返回一个新值来代替这个值,这里是用原值的平方来进行代替的。

sum([1,2,3])

结果是

6

很见的求和

zip([1,3,5],[2,4,6])

结 果是

[(1, 2), (3, 4), (5, 6)]

解释配对成tuple,参数可以是多个的list。

def func(val1, val2):

return val1*val2

print reduce(func, [1,2,3,4])

结果是:

24

这个比较费解。其实是 func((func((func(1,2)),3)),4)。
pow

print ’2**3′

print 2**3

print ‘pow(2,3)’

print pow(2,3)

print ‘pow(2,3)%3′

print pow(2,3)%3

print ‘pow(2,3,3)’

print pow(2,3,3)

结果是:

2**3

8

pow(2,3)

8

pow(2,3)%3

2

pow(2,3,3)

2

其 实**运算就是pow,只不过pow还带一个可选的第三个参数来把乘方结果进行取模运算。

值 得注意的是乘方的底数和幂都能够是整数,小数,甚至是复数。但是当有第三个参数的时候,由于取模运算的限制,只能把底数和幂都限制为整数。
range

print range(10)

print range(1,10)

print range(1,10,3)

结果是

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 2, 3, 4, 5, 6, 7, 8, 9]

[1, 4, 7]

可 见range是左开右闭的。而且我们使用for i in range(xxx)的时候其实 是遍历一个产生的list。
round

print round(0.5)

print round(-0.5)

print round(0.55, 1)

结果是:

1.0

-1.0

0.6

第 二个参数是用来把浮点数变成指定小数位数的。一个规律是round的 结果总是远离0的。

标签: 

回复

电子邮件地址不会被公开。 必填项已用 * 标注

*
*


× 9 = 9