• Python基础------生成器表达式形式、面向过程编程、内置函数部分


    生成器表达式形式

    直接上代码

    复制代码
     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:UsersAdministratorPycharmProjectspython5期a'
    61 start_path2=r'C:UsersAdministratorPycharmProjectspython5期a'
    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']
    复制代码
  • 相关阅读:
    day7django数据库操作
    day4django请求和响应、视图
    计算数字 k 在 0 到 n 中的出现的次数,k 可能是 0~9 的一个值
    day5crm模型、数据库增删改查
    存储过程和自定义函数的区别
    mysql复制表
    搜索关键词高亮
    classpath目录
    nginx 转发https请求
    Bert pretraining
  • 原文地址:https://www.cnblogs.com/chenqizhou/p/7117448.html
Copyright © 2020-2023  润新知