• 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

    第二个是ordchr

    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的参数不在0255的范围内,也会有异常的。
    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

    需要注意hexoct返回的是字符串,而且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('0x12')
    ,这个是不行的。

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

    ValueError: invalid literal for int()

    有可能会把eval也给扯进来,但是eval是把字符串当作python的源代码来看,尝试进行解释执行。和intfloat单纯的类型转换的本意想去太远了。
    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由于是调用了evalraw_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来说,比较大小的只是keyvalue不参加的。
    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的。

  • 相关阅读:
    抽象与接口的综合练习
    java构造函数能否被继承,为什么?
    题解 【USACO 4.2.1】草地排水
    题解 【NOI2010】超级钢琴
    题解 [USACO Mar08] 奶牛跑步
    题解 【NOIP2016】魔法阵
    题解 对称二叉树
    题解 【NOIP2014】解方程
    题解 【NOIP2010】关押罪犯
    题解 贪吃蛇
  • 原文地址:https://www.cnblogs.com/flyingfish/p/748123.html
Copyright © 2020-2023  润新知