内置函数和匿名函数

来源:互联网 发布:apache php 网站发布 编辑:程序博客网 时间:2024/04/30 11:53

截止到python版本3.6.2, python一共为我们提供了68个内置函数。
接下来就简单介绍下这些函数。
这里将函数分为六大类来介绍,常用函数会重点标明。

作用域相关类:

globals()和locals()

a = '这是全局变量a'def func(n):    b = 'func中的局部变量b'    print(locals())    def inner():        print(n)    print(locals())    return innerfunc(1)print(globals())print(locals())

以字典的形式获取全局变量和局部变量
globals()函数–>以字典的形式返回全局变量
locals()函数–> 以字典的形式返回调用locals()函数所在的命名空间内的局部变量(可不是局部变量)
因此,如果globals和locals都在全局命名空间调用,返回的内容一致。
另:global关键字 和nonlocal关键字

迭代器/生成器相关类

range()函数
在python3中, range()函数返回一个产生整数序列的可迭代对象。
这里写图片描述
在python2中, range()函数则返回一个整数列表,xrange()返回的是一个可迭代对象。
这里写图片描述

因此对于range()函数可以切片,可以for循环,可以传参数(start, stop,step)

L = range(100)print(L[:3])print(list(L[:3]))print(list(L[-10:]))print(L[-2])print(list(range(1, 100, 2)))

iter()和next()
iter()函数
参数:可迭代对象
返回值:迭代器

print(iter('abc'))print([1, 3, 4].__iter__())

next()函数:从迭代器或者生成器中取值
参数:迭代器或者生成器
返回值:迭代器或者生成器中的值

next() == iterator.__next__()print(next(iter('abc')))print(iter('abc').__next__())

其他类

1,文件操作相关

open()函数
参数:文件名/文件绝对路径,打开模式,编码

with open(file_name, mode, encoding='') as file:    passmode:'r', 'w', 'a', 'rb' ,'wb', 'ab'

2,调用相关
callable() 检测对象可不可调用
返回True或者False

3,查看内置属性和帮助
dir():查看对象的内置属性和方法。
help():查看对象的内置方法及其详细说明。

4,内存相关
id() 查看对象的内存地址
hash() hash函数

5,模块相关
import

6,输入和输出
input(): input()函数接收的是字符串
print()函数

print(self, *args, sep=’space’, end=’\n’, file=None)
sep关键字参数:指定分隔符
print(1, 2, 3)
print(1, 2, 3, sep=’*’)
end关键字参数:默认换行
print(1, 2, 3, end=”)
print(4, 5, 6)

实例:打印进度条

import timefor i in range(0, 101, 2):    time.sleep(0.1)    char_num = i // 2    per_str = '\r{}%%, {}\n'.format(i, char_num * '|') if i == 100 else'\r{}%%, {}'.format(i, char_num * '|')    print(per_str, end='', flush=True)

7, 字符串类代码的执行
exec()和eval()
compile()函数:常用于编译。

exec函数和eval函数以python代码的形式执行一个字符串。
exec函数没有返回值,常用在流程代码的执行中,而eval函数有返回值,因此常用在值计算时。

exec_return = exec('1+ 2 + 3')eval_return = eval('1+ 2 + 3')print(exec_return)print(eval_return)exec("name = input('enter:')")

exec函数 ,eval函数,compile函数,慎重使用!!!!!

基础数据类型相关

1,和数字相关
bool(), int(), float(), complex()

2, 进制转换
bin(int)把十进制数字转为二进制
oct(int)把十进制数字转换为八进制
hex(int)把十进制数字转换为十六进制

print(bin(12))print(oct(12))print(hex(12))

3、数学运算

abs()求绝对值

divmod(a, b)商余函数 a/b–> a = 商, b= 余

print(divmod(1, 2))print(divmod(7, 2))

实例:分页 (网站类目107条数据, 一页10条。)

round() 按指定位数精确小数点

print(round(0.12345, 3))print(round(9.121212, 0))

pow()幂运算 pow(x, y, z) 如果只传x,y 返回值是x**y,
如果还传了z ,返回值是x**y%z, x的y次方除以z的余数

print(pow(2, 3))print(pow(2, 3, 5))print(pow(3, 2, 7))

sum(iterable) 求和函数

min() 求最小值
min(iterable, key=, default=) #key=函数名 按函数的条件取值 #default= 如果可迭代对象为空的话,可以设置返回值,不设置会报错。

print(min([1, 2, 3, 5, 0]))print(min([], default=0))  # 可迭代对象为空,返回值设置为0print(min([-9, 1, -23, 4], key=abs)) # 按绝对值的最小值取元素

max()函数用法同min()函数

数据结构相关
list(), tuple(), str(), set()
dict()函数参数为关键字参数
frozenset()将集合转换为不可变集合

reversed() :反转序列
可传参数:序列 最常用列表
返回值:迭代器
可以使用list()强转,reversed()函数不同于list.reverse()方法,他没有改变原序列,而是生成了一个新的序列。list.reverse() 没有返回值,直接修改的是原列表。

L = [1, 2, 3, 4, 5, 10]ret = reversed(L)  # 生成迭代器print(ret)print(list(ret))  # 生成一个新的列表 不改变原列表print(L.reverse())  # 没有返回值print(L)  # 对原列表进行反转操作, 改变了原列表
s = 'abcdefg'new_s = reversed(s)print(list(new_s))tu = (1, 2, 3, 2, 9, 5, 6)new_tu = reversed(tu)print(list(new_tu))

format()函数
主要用于字符串的格式化操作
format(str_obj, format_spec)
字符串的格式化方法:’{},{},{}’.format(a, b, c) 或 ‘%s’%(a)

#字符串的左对齐,居中,右对齐(居中 str.center()方法)print(format('format()', '<10'))print(format('format()', '>10'))print(format('format()', '^10'))s = 'format()'.center(10)print(s)

bytes()函数 :常用于网络编程中。
bytes(str_obj, encoding=’utf-8’)
返回一个新的bytes对象。

s = '你好呀,python'ret1 = bytes(s, encoding='utf-8')ret2 = bytes(s, encoding='gbk')print(ret1)print(ret2)print(s)

bytearray()函数:
对比较长的字符串做修改的时候,指定某一处进行修改,不会改变这个bytearry的内存地址。

bytearray(obj_s, encoding=’utf-8’)

ret = bytearray('alpha', encoding='utf-8') print(id(ret))print(ret[0])ret[0] = 65print(ret)print(id(ret))

memoryview()

ret = memoryview(bytes('你好', encoding='utf-8'))print(ret)print(len(ret))print(ret[:3])print(bytes(ret[:3]).decode('utf-8'))print(bytes(ret[3:]).decode('utf-8'))

ord(obj_s)
参数是一个字符(长度为一的字符串)
返回值是该字符的十进制整数

print(ord('a'))print(ord('b'))print(ord('你'))

chr(code)函数
参数是一个字符的十进制整数
返回该十进制整数表示的字符

print(chr(97))print(chr(98))print(chr(20320))

ascii() 只要是ASCII码中的内容就打印出来,不是就转换为\u的形式。

print(ascii('a'))print(ascii('你好'))print(ascii(10))

repr(obj)
返回对象的字符串形式

print(repr(1))print(type(repr(1)))print(repr('1'))print('name:%r' % ('mui'))print(repr([1, 2, 3, 4, 5]))print(type(repr([1, 2, 3, 4, 5])))

enumerate()枚举函数
enumerate(iterable, start=0)
返回enumerate枚举对象,常和for循环搭配使用。

print(enumerate('abc')) #>>> <enumerate object at 0x0000000001F7C678>print(list(enumerate('abc') #>>> [(1, 'a'), (2, 'b'), (3, 'c')]L = ['phone', 'apple', 'bear', 'tv']print(enumerate(L, 1))for i, j in enumerate(L, 1):    print(i, j)

all()
检测对象里的元素是否有空元素,0,False,None
类似逻辑运算符’and‘
参数:all(iterable)
返回值:返回True或者False

print(all([1, 2, 3, 'a', 4, '']))print(all('abcd d f'))print(all((1, 2, 'abc d f ', 5)))print(all([0, 1]))print(all([None, 1]))print(all([1, 2, 3, False]))

!!!!!注意空元祖, 空字符串, 空列表返回的是True

print(all([]))print(all(()))print(all(''))

any(iterable)
检测可迭代参数是否全部为空对象,有一个不为空,返回True,
全部为空返回False,类似逻辑运算符 or。

print(any([False, None, 0, '', (), [], {}]))print(any([[False, None, 0, '', (), [], {}], 1]))print(any(''))print(any([]))print(any(()))

zip(iter1, iter2, iter3…..)拉链函数
zip()函数以最短长度的可迭代对象为基准,将参数可迭代对象中的元素一个个对应打包成元组。
返回值的是zip对象。

zipped = zip([1, 2, 3, 4], ['a', 'b', 'c'], ('哈哈', '呵呵', '嘿嘿'))print(zipped)print(list(zipped))#可以list强转,可以for循环取值for i in zipped:    print(i)for x, y, z in zipped:    print(x, y, z)

filter()函数 过滤函数
过滤序列中不符合条件的元素,返回由符合条件元素组成的filter对象。
filter(function, iterable)

def func(x):    if x % 2 == 1:        return Trueret = filter(func, [1, 2, 3, 4, 5, 7, 9])print(ret, type(ret))print(list(ret))ret = filter(lambda n: n % 2 == 1, [1, 2, 3, 4, 5, 6, 7] )print(list(ret))
#去掉所有的空内容和字符串中的空格l = ['test', None, '', 'str', '  ', 'END']def func(x):    return x and x.strip()ret = filter(func, l)print(list(ret))l = ['test', None, '', 'str', '  ', 'END']ret = filter(lambda x: x and x.strip(), l)print(list(ret))

map(function, iterable)
以序列中的每一个元素为参数调用function函数,返回函数返回值组成的map对象

ret = map(abs, [-1, -2, -3, -4])print(ret)print(list(ret))ret = map(lambda x: x*x, [1, 2, 3, 4, 5])for i in ret:    print(i, end=',')

sorted(iterable,key=None, reverse=False)
ps:max,min

返回(按一定条件)正序排序后的新列表

L = [1, 2, 3, 4, 7, 9, 5]ret = sorted(L)print(ret)  # 返回一个新列表,正序(从小到大)排序过后的新列表print(L)    # 不改变原列表# 但是L.sort() 直接修改的是原列表ret = sorted([1, -2, 1, 4, -3, -2], key=abs, reverse=True)print(ret)ret = sorted(['abc', 'ac', 'a', [1, 3, 4, 5]], key=len)print(ret)ret = sorted([1, 2, 1, 4, -3, -6], key=lambda x: x**2, reverse=True)print(ret)

待续……

匿名函数:
匿名函数Anonymous functions:解决简单功能需求的一句话函数。
一,
函数名 = lambda n: n**n
lambda:定义匿名函数的关键字。
n 函数参数,可有一个也可有多个。
:冒号后面是函数的返回值。

调用方式:函数名(参数)
二,
匿名函数常和其他功能函数结合使用(面试题必出)。

# 返回字典中值最大的键dic={'k1':10,'k2':100,'k3':30}print(max(dic.values()))print(max(dic))print(dic[max(dic,key=lambda k:dic[k])])#现有两个元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]a = (('a'),('b'))b = (('c'),('d'))print([{i: j} for i, j in zip(a, b)])print(list(map(lambda t: {t[0], t[1]}, zip(a, b))))#以下代码的输出是什么?请给出答案并解释。def multipliers():    return [lambda x:i*x for i in range(4)]print([m(2) for m in multipliers()])#请修改multipliers的定义来产生期望的结果。

内置函数流程图参考链接:https://www.processon.com/view/link/597fcacfe4b08ea3e2454ece?pw=G76Z

原创粉丝点击