D04-C语言基础学PYTHON
Posted zhangkanghui
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D04-C语言基础学PYTHON相关的知识,希望对你有一定的参考价值。
C语言基础学习PYTHON——基础学习D04
20180810内容纲要:
1 内置函数
2 装饰器
3 生成器
4 迭代器
5 软件目录结构规范
6 小结
1 内置函数
内置函数方法详解:https://docs.python.org/3/library/functions.html?highlight=built
1 #Author:ZhangKanghui 2 3 print(all([0,-5,4])) 4 print(all([1,-5,4])) 5 #all() return true if all elements of the iterable are true (or if the iterable is empty) 6 #any() 即是有一个真即为真。 7 8 a =ascii([1,2]) 9 print(type(a),a) 10 print(type(a),[a]) 11 #ascii() 把数据对象变成可打印的字符串形式 12 13 #bin() #把数字十进制转二进制 14 print(bool(0)) 15 print(bool(1)) 16 print(bool([])) 17 print(bool([1])) 18 19 a =bytes("abcde",encoding="utf-8") 20 print(a.capitalize(),a) #字符串不可以被修改,因此字节格式的字符串也不能被修改 21 b =bytearray("abcde",encoding="utf-8") #bytearray()变成列表,这样就可以修改了 22 print(b[0]) #以ascii码输出第一个字节 23 b[1] = 100 24 print(b) 25 26 27 print(callable([])) #判断是否可调用,就看能不能加()的方式调用 28 def a():pass 29 print(callable(a)) 30 31 print(chr(98)) 32 print(ord(‘b‘)) 33 34 35 print(divmod(5,3)) #输出结果(商,余数) 36 #eval() #把一个字符串变成字典 37 38 def var(): 39 local_var =333 40 print(locals()) 41 var() 42 print(globals()) #程序的所有变量以key,value字典形式输出 43 print(globals().get(‘local_var‘)) #程序的所有变量以key,value字典形式输出 44 45 46 print(hash(‘Kanghui‘)) 47 48 print(hex(15)) #转十六进制 49 print(oct(1)) #转八进制 50 print(pow(3,5)) #3的5次方 51 d =‘<code object <module> at 0x03379230, file "", line 1>‘ 52 print(repr(d)) #转成字符串 53 print(round(1.433,2)) #保留两位小数 54 f =range(20) 55 #print(d[slice(2,5)]) 这是什么鬼?说好的切片呢 56 57 a ={6:30,8:7,1:4,99:27,18:16} 58 #print(sorted(a)) #只是把字典中的key排序了,没有value的值 59 #如何实现带有value的key排序呢/ 60 #print(sorted(a.items())) #排序完成后变成一个列表,因为字典默认是无序的 61 #那么按value排序怎么办呢? 62 print(sorted(a.items(),key =lambda x:x[1])) 63 print(a) 64 65 66 m =[1,2,3,4] 67 n =[‘a‘,‘b‘,‘c‘,‘d‘] 68 print(zip(m,n)) 69 for i in zip(m,n): 70 print(i)
2 装饰器
a 高阶函数
b 嵌套函数
高阶函数+嵌套函数》=装饰器
定义:本质就是函数,为其他函数添加附加功能。
原则:
1.不能修改被装饰函数的源代码
2.不能修改被装饰函数的调用方式
a 高阶函数
高阶函数1:貌似是一个装饰器,car装饰bar。虽然没有改变bar的源代码为bar添加了附加功能,但是改变了调用方式
1 import time 2 3 def bar(): 4 time.sleep(3) 5 print(‘in the bar‘) 6 7 def car(func): 8 start_time =time.time() 9 func() 10 stop_time =time.time() 11 print(‘the func run time is %s‘ %(stop_time-start_time)) 12 13 car(bar)
高阶函数2:
1 import time 2 def bar(): 3 time.sleep(3) 4 print(‘in the bar‘) 5 def car(func): 6 print(func) 7 return func 8 9 10 # print(car(bar)) 11 #二者的区别 12 # a=car(bar()) #将bar()的执行结果/返回值传给func,这样就不符合高阶函数的定义 13 # b=car(bar) #将bar的内存地址传给func, 14 # print(a) 15 # print(b) 16 t =car(bar) #将bar的内存地址传给func先执行函数car里面的print(bar的内存地址),然后返回执行函数bar 17 t() 18 #此时,把t赋给bar 19 bar=car(bar) 20 bar() 21 #现在好像不修改函数的调用方式也能为其添加附加功能,但是给bar重新定义,将原来函数中的bar给覆盖掉了
如何实现不改变源代码和调用方式的情况下实现装饰器呢?
b 嵌套函数
嵌套函数:
1 #Author:ZhangKanghui 2 3 def foo(): 4 print(‘in the foo‘) 5 def bar(): #此处的函数bar即变量,局部变量。只能在嵌套函数内局部调用 6 print(‘in the bar‘) 7 8 #bar() 这里不能调用函数bar可以类比局部变量
接下来,把高阶函数和嵌套函数结合起来有很么用呢?
>>装饰器:
1 #Author:ZhangKanghui 2 #装饰器 3 4 import time 5 def timer(func): #高阶函数,返回值中包含函数名 6 def dec(): #嵌套函数 7 start_time = time.time() 8 func() #run bar() 9 stop_time = time.time() #添加功能 10 print(‘the func run time is %s‘ % (stop_time - start_time)) 11 return dec #返回函数dec的内存地址 12 #@timer #bar=timer(bar) 13 def bar(): 14 time.sleep(3) 15 print(‘in the bar‘) 16 bar=timer(bar) 17 bar() #bar()=dec() 18 # 如果想要传参数 19 @timer 20 def test2(name): 21 print("test2:",name) 22 test2()
1 #Author:ZhangKanghui 2 #模拟网站,一个函数就是一个网页,部分网页需要登录,添加验证功能 3 4 user,passwd = ‘Kanghui‘,‘abc123‘ #先写个特殊情况下指定用户账号密码 5 import time 6 def auth(func): 7 def wrapper(*args,**kwargs): 8 user_name =input("user_name:").strip() #去掉两头的空格和回车 9 password =input("passwd:").strip() 10 11 if user ==user_name and passwd ==password: 12 print("