1. 程式人生 > >python基礎之生成器表達式形式、面向過程編程、內置函數部分

python基礎之生成器表達式形式、面向過程編程、內置函數部分

[] remove curd fsp mar send 最大限度 rabl ret

生成器表達式形式

直接上代碼

 1 # yield的表達式形式
 2 def foo():
 3     print(‘starting‘)
 4     while True:
 5         x=yield     #默認返回為空,實際上為x=yield None
 6         print(‘value‘,x)
 7 g=foo()
 8 print(g.__next__())    #停到yield位置,生成器初始化,遇到yield返回一個None
 9 print(‘---分割線君---‘)
10 print(g.send(1))       #傳值給yield,然後yield傳給x,最後觸發一次next,遇到yield返回一個None值並暫停
11 print(‘---分割線君---‘)
12 print(g.send(2))

輸出結果

1 starting
2 None    #運行g.__next__()的返回值
3 ---分割線君---
4 value 1   #運行g.send(1)的打印
5 None     #運行g.send(1)的返回值,由yield返回
6 ---分割線君---
7 value 2    #運行g.send(2)的打印
8 None      #運行g.send(2)的返回值

生成器的表達式形式,在每一個包含生成器表達式形式的函數寫完後,都必須要執行第一次__next__方法初始化後(即傳入一個的默認返回值None),才能夠使用send()方法傳入值,否則會拋出TypeError錯誤。

初始化裝飾器:使用裝飾器裝飾的方法進行函數定義後的yield初始化操作,防止遺忘

def init_generator(func):
    def generator(*args,**kwargs):
        gen=func(*args,**kwargs)
        next(gen)
        return gen
    return generator

面向過程編程

函數的參數傳入,是函數吃進去的食物,而函數return/yield的返回值,是函數拉出來的結果,面向過程的思路就是,把程序的執行當做一串首尾相連的函數,一個函數吃,拉出的東西給另外一個函數吃,另外一個函數吃了再繼續拉給下一個函數吃。。。

應用:遞歸一個目錄的文件夾,判斷將該目錄內及子目錄內的文件內容是否包含指定字符串,如果有那麽將該文件絕對路徑打印出來

分析:

  階段一:遞歸地找文件的絕對路徑,把路徑發給階段二

  階段二:收到文件路徑,打開文件獲取獲取對象,把文件對象發給階段三

  階段三:收到文件對象,for循環讀取文件的每一行內容,把每一行內容發給階段四

  階段四:收到一行內容,判斷root是否在這一行中,如果在,則把文件名發給階段五

  階段五:收到文件名,打印結果

 1 #應用:grep -rl ‘root‘ /etc
 2 import os
 3 def init(func):
 4     def wrapper(*args,**kwargs):
 5         g=func(*args,**kwargs)
 6         next(g)
 7         return g
 8     return wrapper
 9 #階段一:遞歸地找文件的絕對路徑,把路徑發給階段二
10 @init
11 def search(target):
12     ‘search file abspath‘
13     while True:
14         start_path=yield
15         g = os.walk(start_path)
16         for par_dir, _, files in g:
17             # print(par_dir,files)
18             for file in files:
19                 file_path = r‘%s\%s‘ % (par_dir, file)
20                 target.send(file_path)
21 #階段二:收到文件路徑,打開文件獲取獲取對象,把文件對象發給階段三
22 @init
23 def opener(target):
24     ‘get file obj: f=open(filepath)‘
25     while True:
26         file_path=yield
27         with open(file_path,encoding=‘utf-8‘) as f:
28             target.send((file_path,f))
29 
30 #階段三:收到文件對象,for循環讀取文件的每一行內容,把每一行內容發給階段四
31 @init
32 def cat(target):
33     ‘read file‘
34     while True:
35         filepath,f=yield
36         for line in f:
37             res=target.send((filepath,line))
38             if res:
39                 break
40 
41 #階段四:收到一行內容,判斷root是否在這一行中,如果在,則把文件名發給階段五
42 @init
43 def grep(target,pattern):
44     ‘grep function‘
45     tag=False
46     while True:
47         filepath,line=yield tag #target.send((filepath,line))
48         tag=False
49         if pattern in line:
50             target.send(filepath)
51             tag=True
52 #階段五:收到文件名,打印結果
53 @init
54 def printer():
55     ‘print function‘
56     while True:
57         filename=yield
58         print(filename)
59 
60 start_path1=r‘C:\Users\Administrator\PycharmProjects\python5期\a‘
61 start_path2=r‘C:\Users\Administrator\PycharmProjects\python5期\a\b‘
62 g=search(opener(cat(grep(printer(),‘root‘))))
63 
64 print(g)
65 # g.send(start_path1)
66 g.send(start_path2)

內置函數

abs() 函數:返回數字的絕對值

語法:

1 abs( x )    #x -- 數值表達式

示例:

print(abs(-9))
print(abs(5.5))
print(abs(45))

all() 函數:判斷給定的可叠代參數 iterable 中的所有元素是否不為 0、‘‘、False 或者 iterable 為空,如果是返回 True,否則返回 False

語法:

1 all(iterable)    #iterable元組或列表

示例:

1 all([‘a‘, ‘b‘, ‘c‘, ‘d‘])      # 列表list,元素都不為空或0,結果返回True
2 all([‘a‘, ‘b‘, ‘‘, ‘d‘])      # 列表list,存在一個為空的元素,結果返回False
3 all([0, 1,2, 3])      # 列表list,存在一個為0的元素,結果返回False
4 all((‘a‘, ‘b‘, ‘c‘, ‘d‘))      # 元組tuple,元素都不為空或0,結果返回True
5 all((‘a‘, ‘b‘, ‘‘, ‘d‘))      # 元組tuple,存在一個為空的元素,結果返回False
6 all((0, 1,2, 3))      # 元組tuple,存在一個為0的元素,結果返回False
7 all([])      # 空列表,結果返回True
8 all(())      # 空元組,結果返回True

any() 函數:判斷給定的可叠代參數 iterable 是否全部為空對象,如果都為空、0、false,則返回 False,如果不都為空、0、false,則返回 True

語法:

1 any(iterable)    #iterable元組或列表

示例:

1 any([‘a‘, ‘b‘, ‘c‘, ‘d‘])      # 列表list,元素都不為空或0,結果返回True
2 any([‘a‘, ‘b‘, ‘‘, ‘d‘])       # 列表list,存在一個為空的元素,結果返回True
3 any([0, ‘‘, False])            # 列表list,元素全為0,‘‘,false,結果返回False
4 any((‘a‘, ‘b‘, ‘c‘, ‘d‘))      # 元組tuple,元素都不為空或0,結果返回True
5 any((‘a‘, ‘b‘, ‘‘, ‘d‘))       # 元組tuple,存在一個為空的元素,結果返回True
6 any((0, ‘‘, False))            # 元組tuple,元素全為0,‘‘,false,結果返回False
7 any([])     # 空列表,結果返回False
8 any(())     # 空元組,結果返回False

進制轉換函數:十進制轉二進制bin()、十進制轉八進制oct()、十進制轉十六進制hex()

語法:

1 bin(x)
2 oct(x)     #x為int或者long int 
3 hex(x)

示例:

1 bin(3)
2 oct(9)
3 hex(13)

bool()函數:布爾值使用常量True和False來表示

語法:

1 bool(x)     #x為任意值

示例:

bool(0)   #False
bool("abc")   #True
bool("")   #False
bool([])   #False
bool()   #False

bytes()函數:返回一個新的不可修改字節數組

語法:

1 #常用
2 bytes(string,encoding)

示例:

1 print(bytes(‘sss‘,encoding=‘utf-8‘))
2 #等同於下面
3 print(‘sss‘.encode(‘utf-8‘))

help()函數:函數用於查看函數或模塊用途的詳細說明。

語法:

1 help(x)

示例:

help(‘sys‘)             # 查看 sys 模塊的幫助
help(‘str‘)             # 查看 str 數據類型的幫助
help(a)                 # 查看列表 list 幫助信息

callable()函數:用於檢查一個對象是否是可調用的。如果返回True,object仍然可能調用失敗;但如果返回False,調用對象ojbect絕對不會成功。對於函數, 方法, lambda 函式, 類, 以及實現了 __call__ 方法的類實例, 它都返回 True。

語法:

1 callable(object)

示例:

1 callable(abs)             # 函數返回 True,或者自定義函數都返回True

chr()函數:用一個範圍在 range(256)內的(就是0~255)整數作參數,返回一個對應的字符,對應ascii表

語法:

1 chr(i)  #i為0-255數字,可以使10進制也可以是16進制

示例:

1 chr(0x30)    #返回0
2 chr(66)  #返回B

ord()函數:chr() 函數的配對函數,chr()傳入數字返回對應字符,ord()傳入字符返回數字

語法:

1 ord(c)  #c為字符,只能是一個

示例:

ord(‘B‘)  #返回66
ord(‘1‘)  #返回49

complex()函數:用於創建一個值為 real + imag * j 的復數或者轉化一個字符串或數為復數。如果第一個參數為字符串,則不需要指定第二個參數

語法:

1 complex([real[, imag]])
2 real -- int, long, float或字符串
3 imag -- int, long, float

示例:

1 x=1-2j  #等同於x=complex(1-2j)
2 print(x.real)  #顯示實部
3 print(x.imag)  #顯示虛部

int()函數:用於將一個字符串會數字轉換為整型

語法:略

示例:略

dict()函數:用於創建一個字典

語法:略

示例:略

tuple()函數:將列表、字典或集合轉換為元組

語法:略

示例:略

list()函數: 用於將元組、字典或集合轉換為列表

語法:略

示例:略

set()函數:創建一個無序不重復元素集,可進行關系測試,刪除重復數據,還可以計算交集、差集、並集等。

語法:略

示例:略

str()函數:將對象轉化為適於人閱讀的形式。

語法:略

示例:略

dir()函數:不帶參數時,返回當前範圍內的變量、方法和定義的類型列表;帶參數時,返回參數的屬性、方法列表。如果參數包含方法__dir__(),該方法將被調用。如果參數不包含__dir__(),該方法將最大限度地收集參數信息

語法:

1 dir(object)

示例:

1 import os
2 dir(os)    #顯示os模塊的可調用方法
輸出結果
[‘DirEntry‘, ‘F_OK‘, ‘MutableMapping‘, ‘O_APPEND‘, ‘O_BINARY‘, ‘O_CREAT‘, ‘O_EXCL‘, ‘O_NOINHERIT‘, ‘O_RANDOM‘, ‘O_RDONLY‘, ‘O_RDWR‘, ‘O_SEQUENTIAL‘, ‘O_SHORT_LIVED‘, ‘O_TEMPORARY‘, ‘O_TEXT‘, ‘O_TRUNC‘, ‘O_WRONLY‘, ‘P_DETACH‘, ‘P_NOWAIT‘, ‘P_NOWAITO‘, ‘P_OVERLAY‘, ‘P_WAIT‘, ‘PathLike‘, ‘R_OK‘, ‘SEEK_CUR‘, ‘SEEK_END‘, ‘SEEK_SET‘, ‘TMP_MAX‘, ‘W_OK‘, ‘X_OK‘, ‘_Environ‘, ‘__all__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘, ‘__spec__‘, ‘_execvpe‘, ‘_exists‘, ‘_exit‘, ‘_fspath‘, ‘_get_exports_list‘, ‘_putenv‘, ‘_unsetenv‘, ‘_wrap_close‘, ‘abc‘, ‘abort‘, ‘access‘, ‘altsep‘, ‘chdir‘, ‘chmod‘, ‘close‘, ‘closerange‘, ‘cpu_count‘, ‘curdir‘, ‘defpath‘, ‘device_encoding‘, ‘devnull‘, ‘dup‘, ‘dup2‘, ‘environ‘, ‘errno‘, ‘error‘, ‘execl‘, ‘execle‘, ‘execlp‘, ‘execlpe‘, ‘execv‘, ‘execve‘, ‘execvp‘, ‘execvpe‘, ‘extsep‘, ‘fdopen‘, ‘fsdecode‘, ‘fsencode‘, ‘fspath‘, ‘fstat‘, ‘fsync‘, ‘ftruncate‘, ‘get_exec_path‘, ‘get_handle_inheritable‘, ‘get_inheritable‘, ‘get_terminal_size‘, ‘getcwd‘, ‘getcwdb‘, ‘getenv‘, ‘getlogin‘, ‘getpid‘, ‘getppid‘, ‘isatty‘, ‘kill‘, ‘linesep‘, ‘link‘, ‘listdir‘, ‘lseek‘, ‘lstat‘, ‘makedirs‘, ‘mkdir‘, ‘name‘, ‘open‘, ‘pardir‘, ‘path‘, ‘pathsep‘, ‘pipe‘, ‘popen‘, ‘putenv‘, ‘read‘, ‘readlink‘, ‘remove‘, ‘removedirs‘, ‘rename‘, ‘renames‘, ‘replace‘, ‘rmdir‘, ‘scandir‘, ‘sep‘, ‘set_handle_inheritable‘, ‘set_inheritable‘, ‘spawnl‘, ‘spawnle‘, ‘spawnv‘, ‘spawnve‘, ‘st‘, ‘startfile‘, ‘stat‘, ‘stat_float_times‘, ‘stat_result‘, ‘statvfs_result‘, ‘strerror‘, ‘supports_bytes_environ‘, ‘supports_dir_fd‘, ‘supports_effective_ids‘, ‘supports_fd‘, ‘supports_follow_symlinks‘, ‘symlink‘, ‘sys‘, ‘system‘, ‘terminal_size‘, ‘times‘, ‘times_result‘, ‘truncate‘, ‘umask‘, ‘uname_result‘, ‘unlink‘, ‘urandom‘, ‘utime‘, ‘waitpid‘, ‘walk‘, ‘write‘]

python基礎之生成器表達式形式、面向過程編程、內置函數部分