1. 知识回顾
isinstance(object, class) ----> 判断该对象是否是该类的实例
s = 'cnskcsk' ret = isinstance(s, str) print(ret) #>>>>>>>>>>>>>>> True
传入 列表 字典 集合 时,默认传入的是实参的引用地址,即可以修改实参
def app(args):
args.append('333')
return args
li = [11,22]
ret = app(li)
print(li)
#>>>>>>>>>>>
[11, 22, '333']
一旦对形参进行赋值操作,就新开辟一块内存使args指向这块新开辟的,而实参不变
def app(args):
args = 'qweqweqwe'
return args
li = [11,22]
ret = app(li)
print(li)
#>>>>>>>>>>>
[11, 22]
处理字典 列表等有两种方式:1改变自身 *2返回新建的变量*
# def qu2(args):
# r = {}
# for key, value in args.items():
# if len(value) > 2:
# r[key] = value[0:2]
# else:
# r[key] = value
# return r
#
# l = {'k1': 'xascaasdx', 'k2': 'cf', 'k3': [11,22,33]}
# print(qu2(l))
>>>>>>>>>>>>>>>>>>>>>>>>>>两种方法
def qu2(args):
for key, value in args.items():
if len(value) > 2:
args[key] = value[0:2]
else:
args[key] = value
l = {'k1': 'xascaasdx', 'k2': 'cf', 'k3': [11,22,33]}
qu2(l)
print(l)
2. lambda表达式
简易的表示函数
def f1(a1, a2): return a1 + a2 f2 = lambda a1, a2: a1 + a2 r1 = f1(1, 2) r2 = f2(1, 2) print(r1) print(r2) #>>>>>>>>> 3 3
3. 内置函数

0 None "" [] () {} 为False , 其他为True
abs() 取绝对值
all() 循环参数,若每个元素都为True, 返回真
any() 循环参数,只要有一个True, 返回True
ascii() 去参数对象的类中寻找 __repr__() 方法, 执行获取返回值
bin() 二进制
oct() 八进制
int() 十进制 ret = int('0b1010', base=2) ----> 将二进制转为十进制
hex() 十六进制
bool() 判断真假,即将参数转为布尔值
bytes() 字节
bytearray() 字节数组,每一个元素为字节, 类似 字符串跟列表的关系
chr() 接收一个十进制数,返回对应ASCII码的字符
ord() 与 chr() 相反,接收一个字符,返回ASCII对应十进制数
小例子:生成随机验证码
import random
temp = ''
for i in range(4):
num = random.randrange(65, 91) #65~90 A~Z
ch = chr(num)
temp += ch
print(temp) #随机生成四位验证码
改进为 既包含数字 又包含字母的
import random
temp = ''
for i in range(6):
rd = random.randrange(0, 4)
if rd == 1 or rd == 3:
num1 = random.randrange(0, 10)
temp += str(num1)
else:
num = random.randrange(65, 91) # 65~90 A~Z
ch = chr(num)
temp += ch
print(temp) #随机生成6位验证码
callable() 检测参数是否是可执行的
compile() 把字符串编译成可执行代码,可以与exec()结合使用
dir() 返回对象所在类里的所有方法
help() 输出类的所有详细信息
divmod() divmod(a, b) 返回a/b的 商 和 余数 组成的元组,可以用在 分页 中
eval() 执行一个字符串格式的表达式
ret = eval('1 + 3 * 2')
print(ret)
#>>>>>>>>>>>
7
后面可以带字典指定字符串中的变量值
ret = eval('a + 10', {'a':23})
#后面带字典,指定变量的值
print(ret)
#>>>>>>>>>>>
33
exec() 执行字符串形式的代码,没有返回值
exec('for i in range(10): print(i)')
#>>>>>>>>>
0
1
2
3
4
5
6
7
8
9
filter() filter(函数名, 可迭代的对象) 循环取后者的元素,作为函数的参数,执行。若返回True, 保存该元素
即 过滤出符合条件的元素
def f1(args):
if args > 22:
return True
else:
return False
ret = filter(f1, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#通过lambda表达式
ret = filter(lambda x: x > 22, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#>>>>>>>>>>>
<filter object at 0x00000238C7A7CE48>
33
44
<filter object at 0x00000238C7A7CE80>
33
44
map() 跟filter() 类似,不同在于 对每个元素做统一的处理
def f1(args):
return args + 100
ret = map(f1, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#通过lambda表达式
ret = map(lambda x: x + 100, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#>>>>>>>>>>>
<map object at 0x000001BF2210CE48>
111
122
133
144
<map object at 0x000001BF2210CE80>
111
122
133
144
def f1(args):
if args % 2 == 0:
return args + 100
else:
return args
ret = map(f1, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#通过lambda表达式
ret = map(lambda x: x + 100 if x % 2 == 0 else x, [11, 22, 33, 44])
print(ret)
for i in ret:
print(i)
#>>>>>>>>>>>
<map object at 0x000001FF537FCE48>
11
122
33
144
<map object at 0x000001FF537FCE80>
11
122
33
144
locals() 获取所有局部变量
globals() 获取所有全局变量
def f1():
n1 = 123
print(locals())
print(globals())
l = [11,22,33]
f1()
#>>>>>>>>>>>>>>>>>>>>>
{'n1': 123}
{'__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000001F7B1AEAA58>, 'f1': <function f1 at 0x000001F7B1BB10D0>, '__spec__': None, 'l': [11, 22, 33], '__file__': 'C:/Users/LiuKai/PycharmProjects/Fighting/main/src.py', '__package__': None, '__builtins__': <module 'builtins' (built-in)>, '__doc__': None, '__name__': '__main__', '__cached__': None}
id() 内存地址
hash() 返回其哈希值
iter() 转为可迭代的对象,使用next()取值,每执行一次next()取下一个值
max() min() 取最大值 最小值 sum() 求和
pow() 指数运算 pow(2, 10) = 1024
repr() 类似 ascii() , 不过 ascii() 遇到中文会转义
reversed() 反转 需要在迭代(for循环)中取出元素
round() 四舍五入
zip() 把对应的元素组成一个元组作为一个元素
l = [11, 22, 33, 44, 55]
m = ['qq', 'ss', 'dd', 'dd']
n = ['@@', '##', '$$', '%%']
r = zip(l, m, n)
for i in r:
print(i)
#>>>>>>>>>
(11, 'qq', '@@')
(22, 'ss', '##')
(33, 'dd', '$$')
(44, 'dd', '%%')
__import__() 也是导入模块,r = __import__(random), 之后再用到时使用 r.randomrange() 相当于起了一个别名
sorted() 排序顺序
对数字来说,从小到大
对字符串来说, 先数字,后字母字符,最后汉字
l = [ '你好','11', 'yadlan', '1324', '23', '546', 'rruhvd', 'Ancskdna', 'Av s,', '好啊']
r = sorted(l)
print(r)
for i in r:
print(bytes(i, encoding = 'utf-8'))
#>>>>>>>>>>>>
['11', '1324', '23', '546', 'Ancskdna', 'Av s,', 'rruhvd', 'yadlan', '你好', '好啊']
b'11'
b'1324'
b'23'
b'546'
b'Ancskdna'
b'Av s,'
b'rruhvd'
b'yadlan'
b'xe4xbdxa0xe5xa5xbd'
b'xe5xa5xbdxe5x95x8a'
文件操作