标签:
函数可能遇到的问题:下面例子函数改变了函数需要传入的参数
li = [11,22,33,44] def f1(arg): arg.append(55) f1(li) print(li) #打印结果为 [11,22,33,44,55]
检测传的值能不能调用: callable()
f2 = [1,2,3] print(callable(f1)) #打印结果为True
chr(), ord()针对ASC码对应表的关系
r = chr(65) o = ord("B") print(r,o) #打印结果为A,66
给一个范围,在范围里生成一个随机数字(随机验证码): random.randrange()
import random #生成6次循环 li = [] for i in range(6): temp = random.randrange(65,91) #65<=temp<91 c = chr(temp) li.append(c) result = "".join(li) #join只连接字符串 print(result) #想要第三位数永远是数字 for i in range(5): r = random.randrange(0,5) if r ==2 and r==4: num = random.randrange(0,10) li.append(str(num)) else: temp = random.randrange(65,91) #65<=temp<91 c = chr(temp) li.append(c) result = "".join(li) #join只链接字符串 print(result)
如何将字符串转换成python代码并执行:
#1.读取文件内容open,str到内存 #2. 将字符串转换成python代码 e.g compile #3. 执行代码 e.g exec #编译,single(单行),eval(表达式),exec(和python一模一样的) s = "print(123)" #将字符串编译成python代码 r = compile(s,"<string>","exec") #执行代码(接收代码或字符串),没有返回值 exec(r) #eval:字符串转表达式并且执行,获取结果为64 s = "8*8" ret = eval(s) print(ret) #exec能执行所有python代码或字符串(内部编译再执行),然而eval只能执行表达式;不过eval多一个返回值功能
查看功能、读源代码
#快速查看一个对象给你提供了什么功能 print(dir(dict)) #读源码 print(help(list))
除法运算同时获得商和余数
#97条,一页10条,需要多少页 #dimod返回一个元组,包含商和余数 r = divmod(97,10) print(r) #也可以这样获取两个分开的结果 n1,n2 = divmod(97,10) print(n1,n2)
判断对象是不是某个类的实例isinstance()
s = "Alex" #"Alex"是对象,与类有关系 #dict,list是类 #对象是类的实例 #"Alex"是str的实例 #isinstance判断对象是不是某个类的实例 print(isinstance(s,str)) #打印结果为True
filter,map
#filter: 循环第二个参数,让每一个循环元素执行第一个参数(函数);如果函数返回值是True,表示元素合法 li = [11,22,33,44] def f2(a): if a>22: return True ret = filter(f2,li) #第一个参数是函数,第二个参数是可迭代的对象 print(list(ret)) #打印结果为[33,44] #lambda函数(也是定义函数一种方式):内部自动return f1 = lambda a: a > 30 ret = f1(90) print(ret) #结果是True result = filter(lambda a: a>33,li) print(list(result)) #结果为[44] #map函数将返回元素添加到结果中 #可以迭代的对象,可以for循环的东西 li = [11,22,33,44,55]#需求:每个元素加100 ‘‘‘def f1(args): result = [] for i in args: result.append(100+i) return‘‘‘ def f2(a): return a+100 result = map(f2,li) print(list(result)) #用lambda表达式替代 result = map(lambda a: a+100,li) #将返回值返回 r = filter(lambda a: a+100,li) #将列表元素返回 print(list(result)) print(list(r))
其他built-in functions
#globals #代表所有全局变量 #locals #代表所有局部变量 NAME = "Alex" def show(): a = 123 print(locals()) print(globals()) show() #hash():python内部的转换 s = "ifeufgiue" print(hash(s)) #len() in python3,既可以通过字符又可以通过字节查看长度 s = "李杰" b = bytes(s, encoding = "utf-8") len(b) len(s) li =[11,22,33,44] a = max(li) #最大值 b = min(li) #最小值 c = sum(li) #求和 print(a,b,c) d = pow(2,10) #求指数,same as 2**10 #反转 li.reverse() reversed(li) print(li) #round四舍五入 x = round(4.556) print(x) #slice #sorted li.sort() sorted(li) print(li) #zip() li = []
首先函数是可以赋值变量,将函数作为参数,或者将函数作为返回值。而Decorator本质就是将函数作为参数,并且返回函数的函数。
good to read: https://realpython.com/blog/python/primer-on-python-decorators/
关于一个函数的函数:
def f1(): print(123) def f2(): print(456) def f1(): print(‘123‘) def f2(xxx): xxx() f2(f1) #f2关于f1的函数是f1函数
为了更简洁、明了,python运用Sugar Syntax:@ + 函数名
可实现功能:
1. 自动执行outer函数并且将其下面的函数名f1当作参数传递
2. 将outer函数的返回值,重复赋值给 f1
def outer(func): def inner(*args, **kwargs): print(‘before‘) r = func(*args, **kwargs) print(‘after‘) return r return inner @outer def f1(arg): print(arg) return "hello" @outer def f2(a1, a2): print("F2") @outer def f3(): print("F3")
只有outer函数被调用的时候f1才会被调用;Decorator返回inner函数,结果为被修饰过的f1函数:
def outer(func): def inner(): print(‘log‘) return func() return inner @outer def f1(): print("F1") @outer def f2(): print("F2") @outer def f100(): print("F100") outer(f1()) #打印结果为log F1
运用Decorator的注册登录程序模版:
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 == "alex" 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()
标签:
原文地址:http://www.cnblogs.com/monicas/p/5539133.html