python基础(四)
内置函数

- callable() #判断是否能够被调用执行,可以调用返回True,例如函数和类
- chr() #将ascii值转换为字符,例如print(chr(65) )输出为a
- ord()#将字符转换为ascii值,例如print(ord('a')) 输出为97
- chr和ord应用随机生成验证码
-
#随机生成数字和大写字母的验证码 import random li = [] for i in range(6): r = random.randrange(0,5) if r == 2 or r== 4: num = random.randrange(0,10) li.append(str(num)) else: temp = random.randrange(65,91) c = chr(temp) li.append(c) resault = "".join(li) print(resault) #第二位和四位为数字 # li = [] # for i in range(6): # if i == 2 or i == 4: # num = random.randrange(0,10) # li.append(str(num)) # else: # temp = random.randrange(65,91) # c = chr(temp) # li.append(c) # resault = "".join(li) # print(resault)
- compile() #将字符串编译为python代码,执行python代码,接收代码或者字符串
-
s = 'print(123)' #编译,single,eval,exec #将字符串编译为python代码 r = compile(s,"<string>","exec") #执行python代码 exec (r) 输出为 123
- exec() #执行python代码,无返回值
- eval() #将字符串转换为表达式,并把结果计算出来,有返回值;ret = eval('7+8+9');print(ret) 输出为24
- dir() #快速查看对象提供了哪些功能,print(dir(list))
- help() #查看帮助信息,详细的使用说明,包括对象功能方法带的参数等print(help(list))
- divmod() #接收2个参数,前一个参数对后一个参数求余操作,结果将整数和余数打印出来r = divmod(97,10);print(r)输出(9, 7)商9余7
- isinstance() #判断对象是否为某一个类的实例,属于返回True否则返回False
-
li = [1,2,3,4] resault = isinstance(li,list) print(resault) #输出 True #如果li属于list类返回True
- filer() #对筛选出来的结果进行函数操作,filter执行内部循环第二个参数,让每个循环元素执行函数,如果函数返回值为True表示元素合法;filter('函数','可迭代的对象')
-
#完全函数方式实现返回列表中大于22的元素 def f1(a): resault = [] for item in a: if item >22: resault.append(item) return resault l1 = [11,22,33,44,55] ret1 = f1(l1) print(ret1) #filer+函数返回列表中大于22的元素 def f2(a): if a > 22: return True li = [11,22,44,33,66] ret = filter(f2,li) print(list(ret)) #通过fileter+lamda表达式来实现 l2 = [11,22,44,55,66] resault = filter(lambda a:a>33,l2) print(list(resault))
- map() #批量将迭代对象中的元素进行操作,map('函数','可迭代对象(可以for循环的东西)');
-
#通过整个函数实现对列表中数据全部加100操作 li = [11,22,33,44,55] def f1(args): resault = [] for i in args: resault.append(100+i) return resault r = f1(li) print(r) #函数方式map使用形式 li = [11,22,33,44,55] def f2(a): return a+100 resault = map(f2,li) print(list(resault)) #lambda方式map使用形式 li = [11,22,33,44,55] resault = map(lambda a:a+100,li) print(list(resault))
#filter 函数返回True,将元素添加到结果中
#map 将函数返回值添加到结果中 - locals()#所有局部参数集合
- globals() #所有全局变量参数集合
- hash()#pyhon中存储字符串都是通过此函数计算的哈希值来存储的
- len()#计算字符串的长度,py2中以默认字节来计算长度,py3中以默认字符来计算长度
-
#验证py3中输出情况 s = "张三" print(len(s)) b = bytes(s,encoding='utf-8') print(len(b)) 2 6 #py3.5中循环汉字时候正常输出 for i in '张三': print(i) 张 三 #py2.7中循环汉字时候出现乱码 for i in '张三': print(i) � � � � � �
-
# 字符串转换字节类型 #位,字节,汉字的关系 # 1、bit:位 # 一个二进制数据0或1是1bit # 2、byte:字节 # 存储空间的基本计量单位 如:MySQL中定义 VARCHAR(45) 即是指 45个字节 # 1byte = 8bit # 3、一个英文字符占用1个字节 # 1字母 = 1byte = 8bit # 4、一个汉字占用2个字节(GBK中) # 5、标点符号 # 汉字输入状态下,默认为全角输入方式; # 英文输入状态下,默认为半角输入方式; # 全角输入方式下,标点符号占2字节; # 半角输入方式下,标点符号占1字节; # utf-8 一个汉字:三个字节 # gbk 一个汉字:二个字节 # utf-8 s = "张三" # 一个字节8位,一个汉字三个字节 # 字符串转换字节类型 # bytes(要转换的字符串,编码形式) n = bytes("张三", encoding="utf-8") print(n) #b'\xe6\x9d\x8e\xe6\x9d\xb0' utf-8一个汉字占用3个字节 n = bytes("张三", encoding="gbk") print(n) #b'\xc0\xee\xbd\xdc' GBK一个汉字占用2个字节 # 字节转化成字符串 new_str = str(bytes("张三", encoding="utf-8"), encoding="utf-8") print(new_str)
字节与字符:
- ASCII 码中,一个英文字母(不分大小写)为一个字节,一个中文汉字为两个字节。
- UTF-8 编码中,一个英文字为一个字节,一个中文为三个字节。
- Unicode 编码中,一个英文为一个字节,一个中文为两个字节。
- 符号:英文标点为一个字节,中文标点为两个字节。例如:英文句号 . 占1个字节的大小,中文句号 。占2个字节的大小。
- UTF-16 编码中,一个英文字母字符或一个汉字字符存储都需要 2 个字节(Unicode 扩展区的一些汉字存储需要 4 个字节)。
- UTF-32 编码中,世界上任何字符的存储都需要 4 个字节。
python encode和decode函数说明
字符串转为字节类型,
str='ssssss'
s1_byte = str.encode()
字节转换为字符串类型
s1_str = s1_byte.decode()
![]()
- max() #取参数中最大的值,参数值均为int类型数字
- min()#取参数中最小的值
- sum()#求和
- pow() #求平方等价于** 例如2**10==pow(2,10)
- reversed()#对参数中元素反向显示在列表中等价于list.reverse()
-
#li.reverse()与reversed(li)是等价的 li = [11,22,1,3,5,2] li.reverse()#对列表顺序反向输出 print(li) #[2, 5, 3, 1, 22, 11] print(list(reversed(li))) #[11, 22, 1, 3, 5, 2] #sort和sorted对列表中元素进行大小排序 li = [11,22,1,3,5,2] li.sort() print(li) #sort表示对自己的列表操作 li2 = sorted(li) print(li2) #sorted表示作为一个新的列表排序
- round() #四舍五入函数print(round(1.4)) 输出1
- zip() #将多个列表合并为1个
-
#zip函数将三个列表进行了合并,当其中一个列表元素数量和其他列表元素个数不等时,新的列表以少的元素为准,不会将没有的元素列作为新的元素 l1 = ['lily',11,22,33] l2 = ['is',11,22] l3 = ['a girl',11,22,33] r = zip(l1,l2,l3) print(list(r)) #输出: [('lily', 'is', 'a girl'), (11, 11, 11), (22, 22, 22)] #对列表中元素进行join合并 l1 = ['lily',11,22,33] l2 = ['is',11,22,33] l3 = ['a girl',11,22,33] r = zip(l1,l2,l3) temp = list(r)[0] ret = ' '.join(temp) print(ret) #输出: lily is a girl
函数相关--装饰器
用法:
@+函数名
功能:
- 自动执行装饰器定义的函数并且将其下面的函数名当作参数传递
- 将装饰器定义函数的返回值,重复赋值给下面的函数
例子:
#定义一个简单装饰器 def outer(func): def inner(): print('before') func() print('after') return inner @outer def f1(): print('F1') #调用装饰器中的函数 import test #上面装饰器文件名称为test.py test.f1() #输出 before F1 after
装饰器的应用登陆的练习
#!/usr/bin/env python #-*- coding:utf-8 -*- LOGIN_USER = {'is_login':False} def outer(func): def inner(*args,**kwargs): if LOGIN_USER['is_login']: r = func() return r else: print("请登陆") return inner def outer1(func): def inner(*args, **kwargs): if LOGIN_USER['is_login'] and LOGIN_USER['user_type'] == 2: r = func() return r else: print("请登录,或者权限不够") return inner @outer1 def order(): print('欢迎%s登录'%LOGIN_USER['current_user']) @outer def changepwd(): print('欢迎%s登录' % LOGIN_USER['current_user']) @outer def manager(): print('欢迎%s登录' % LOGIN_USER['current_user']) def login(user,pwd): if user == 'ljb' and pwd == '123': LOGIN_USER['is_login'] = True LOGIN_USER['current_user'] = user manager() def main(): while True: inp = input("1后台管理:2,登录") if inp == '1': manager() elif inp == '2': username = input("请输入用户名:") pwd = input("请输入密码:") login(username,pwd) main()


浙公网安备 33010602011771号