Python常用内置函数

compile()

# compile()_39

"""
    compile()
        compile(source, filename, mode[, flags[, dont_inherit]])
        compile() 函数将一个字符串编译为字节代码。
        
        source -- 字符串或者AST(Abstract Syntax Trees)对象。。
        filename -- 代码文件名称,如果不是从文件读取代码则传递一些可辨认的值。
        mode -- 指定编译代码的种类。可以指定为 exec, eval。
        flags -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。。
        flags和dont_inherit是用来控制编译源码时的标志
"""

# 将语句转换为字节码文件,exec() 函数能运行该字节码文件
var0 = compile('print("I Love You.")', '', 'exec')  # <code object <module> at 0x03420548, file "", line 1>
exec(var0)  # I Love You.

# 将该字符串转换为字节码文件,eval() 函数能将该字节码文件的结果计算出来
var1 = compile('10 * 10', '', 'eval')  # <code object <module> at 0x034A05A0, file "", line 1>
eval(var1)  # 100

Link:菜鸟教程_compile()

eval()

# eval()_39

"""
    eval()
        eval(expression[, globals[, locals]])
        eval() 函数用来执行一个字符串表达式,并返回表达式的值。
"""

# 可以吧 str 转换为 int 型
num0 = eval('100')  # 相当于 int('100')

# ================================================================== #
# eval() 中不允许有以0开头的数值:SyntaxError: invalid token
# ================================================================== #

# eval('0100')  # int('0100') 不报错

# 能计算 str 里的值
num1 = eval('10 * 10')  # 100

# 当 str 的表达式为 num1, num2, ...,能做解包操作
num2, num3 = eval('100, 200')  # 类似 (100, 200).split(',')

# 可用于值的输入操作
# 注意数值间使用 ',' 分隔
num4, num5 = input("请输入两个数:")

# 类似的可以写为
num6, num7 = map(int, input("请输入两个数值:").split(','))

Link:菜鸟教程_eval()

filter()

# filter()_35

"""
    filter()
        filter(function, iterable)
        filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
        该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,\
        \ 然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
"""

def is_not_0(args):
    return True if args is not 0 else False

# 筛出0
iter0 = filter(is_not_0, [2, 5, 0, 9, 6, 0, 7])  # <filter object at 0x035FCAF0>

# 简单实现filter()

def new_filter(function, iterable):
    
    result = []
    
    # 将返回 True 的元素放到新列表中
    for element in iterable:
        if function(element):
            result.append(element)
    
    return result
            
iter1 = new_filter(is_not_0, [2, 5, 0, 9, 6, 0, 7])  # [2, 5, 9, 6, 7]

Link:菜鸟教程_filter()

map()

# map()_35

"""
    map()
        map(function, iterable, ...)
        map() 会根据提供的函数对指定序列做映射。
        第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
"""

def add_one(args):
    # args add one and returns
    return args + 1

iter1 = map(add_one, range(10))  # <map object at 0x039BC870>
iter1 = list(iter1)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# ========================================================================================= #
# 不报错当进行输出时报:TypeError: add_one() takes 1 positional argument but 2 were given
# ========================================================================================= #
iter2 = map(add_one, [0, 1, 2, 3], [1, 2, 3, 4])  # <map object at 0x03ADCAF0>

def new_add_one(args0, args1):
    args0 += 1
    args1 += 1

# ========================================================================================= #
# map() 得到的值由参数一中的函数所确定,输出得到:[None] * 4
# ========================================================================================= #
iter3 = map(new_add_one, range(4), range(1, 5))  # <map object at 0x03DECF70>

def over_add_one(args0, args1):
    return args0 + 1, args1 + 1

iter4 = map(over_add_one, range(4), range(1, 5))  # 输出得到 [(1, 2), (2, 3), (3, 4), (4, 5)]


# 可以使用 map() 构成简单的 zip(),利用 map() 多序列传参的特点

def zip_func(args0, args1):
    return (args0, args1)  # 括号可有可无

iter5 = list(map(zip_func, range(10), range(10)))  # [(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]

# 也可以使用匿名函数

iter6 = list(map(lambda x, y: (x, y), range(10), range(10)))

Link:菜鸟教程_eval()

range()

# range()_37

"""
    range()
        range(start, stop[, step])
        python range() 函数可创建一个整数列表,一般用在 for 循环中。
"""

# 长度为:10
iter0 = range(10)

# 开始值:5
iter1 = range(5, 10)

# 步长为:2
iter2 = range(0, 10, 2)

Link:菜鸟教程_range()

zip()

# zip()_38

"""
    zip()
        zip([iterable, ...])
        zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。
        如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。
"""

iter0 = zip(range(10), range(10, 0, -1))  # <zip object at 0x0318F440>

iter1 = zip(*iter0)  # <zip object at 0x035EDEB8>
iter1 = list(iter1)  # [(0, 1, 2, 3, 4, 5, 6, 7, 8, 9), (10, 9, 8, 7, 6, 5, 4, 3, 2, 1)]

Link:菜鸟教程_zip()

reduce()

# reduce()_35

from functools import reduce

"""
    reduce()  # functools
        reduce(function, iterable[, initializer])
        reduce() 函数会对参数序列中元素进行累积。
        函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,\
        \ 得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
"""

def x_add_y(args0, args1):
    return args0 + args1

# 执行过程:先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
iter0 = reduce(x_add_y, range(10))  # 类似 sum(range(-10))

# 使用匿名函数

iter1 = reduce(lambda x, y: x + y, range(10))

Link:菜鸟教程_reduce()

例子

# 2.5_39

from math import (cos, sqrt, pi)

# 1
# 用户输入一个三位自然数,计算并输出其百位,十位,个位上的数字。

def HDU():
    
    # 直接求值
    num = int(input("请输入一个三位自然数:"))
    hundred, decade, unit = num // 100, num // 10 % 10, num % 10  # 求百位,十位,个位
    
    # 使用 divmod() 函数
    """
        divmod()
            divmod(a, b)
            函数接收两个数字类型(非复数)参数,返回一个包含商和余数的元组(a // b, a % b)
            
            如果参数 a 与 参数 b 都是整数,函数返回的结果相当于 (a // b, a % b)。
            如果其中一个参数为浮点数时,函数返回的结果相当于 (q, a % b),q 通常是 math.floor(a / b),但也有可能是 1 ,比小,不过 q * b + a % b 的值会非常接近 a。
            如果 a % b 的求余结果不为 0 ,则余数的正负符号跟参数 b 是一样的,若 b 是正数,余数为正数,若 b 为负数,余数也为负数,并且 0 <= abs(a % b) < abs(b)。
    """
    # hundred, temp = divmod(num, 100)
    # decade, unit = divmod(temp, 10)
    
    # =========================================================================================================================================================== # 
    # 使用 map() 函数
    # =========================================================================================================================================================== #
    
    # hundred, decade, unit = map(int, num)
    
    return {'输入': num, '百位': hundred, '十位': decade, '个位': unit}  # 返回字典


# 2
# 已知三角形的两边长及其夹角,求第三边长

def third_side():
    
    fir_side, sec_side, angle = map(float, input("请输入两条边及其夹角:"))
    
    thi_side = sqrt(fir_side ** 2 + sec_side ** 2 - 2 * fir_side * sec_side * cos(angle * (pi / 180)))
    
    return "第三边长为:" + str(thi_side)


# 3
# 任意输入三个英文单词,按照字典顺序依次输出

def order_word():
    
    fir_word, sec_word, thi_word = input("请输入三个英文单词:").split(',')
    min_len = min([len(fir_word), len(sec_word), len(thi_word)])
    fir_num, sec_num, thi_num = 0, 0, 0
    
    for i in range(min_len):
    
        if fir_word[i] < sec_word[i]:
            fir_num += 1
        else:
            sec_num += 1
        
        if fir_word[i] < thi_word[i]:
            fir_num += 1
        else:
            thi_num += 1
        
        if sec_word[i] < thi_word[i]:
            sec_num += 1
        else:
            thi_num += 1
        
    if fir_num > sec_num > thi_num:
        return {'fir_word': fir_word, 'sec_word': sec_word, 'thi_word': thi_word}
    
    if fir_num > thi_num > sec_num:
        return {'fir_word': fir_word, 'sec_word': thi_word, 'thi_word': sec_word}
    
    if sec_num > fir_num > thi_num:
        return {'fir_word': sec_word, 'sec_word': fir_word, 'thi_word': thi_word}
    
    if sec_num > thi_num > fir_num:
        return {'fir_word': sec_word, 'sec_word': thi_word, 'thi_word': fir_word}
    
    if thi_num > fir_num > sec_num:
        return {'fir_word': thi_word, 'sec_word': fir_word, 'thi_word': sec_word}
    
    if thi_num > sec_num > fir_num:
        return {'fir_word': thi_word, 'sec_word': sec_word, 'thi_word': fir_word}
    
    # =========================================================================================================================================================== # 
    # 使用 sorted() 函数
    # =========================================================================================================================================================== #
    
    # fir_word, sec_word, thi_word = sorted([fir_word, sec_word, thi_word])
    # return {'fir_word': fir_word, 'sec_word': sec_word, 'thi_word': thi_word}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值