• py2


    函数相关的

    # 生成器相关的
    #
    例1 ll = sum(i for i in range(100000000)) #生成器占资源少 # 例2 def demo(): for i in range(4): yield i g = demo() g1 = (i for i in g) g2 = (i for i in g1) print(list(g1)) #取值1次结束 print(list(g2)) # 例3 def add(n,i): return n+i def test(): for i in range(4): #0 1 2 3 yield i g = test() for n in [1,10]: g = (add(n,i) for i in g) #解析思路 # n=10 # g2 = (add(10,i) for i in ((add(10,i) for i in g))) #10 11 12 13 print(list(g))
    # compile 将字符串类型的代码编译。代码对象能够通过exec语句来执行或者eval()进行求值
    eval() 将字符串类型的代码执行并返回结果
    print(eval('1+2+3+4'))
    
    exec()将自字符串类型的代码执行
    exec("1+2+3+4") #没有返回值
    exec("print('hello,world')")
    def print(self, *args, sep=' ', end='
    ', file=None): # known special case of print
        """
        print(value, ..., sep=' ', end='
    ', file=sys.stdout, flush=False)
        file:  默认是输出到屏幕,如果设置为文件句柄,输出到文件
        sep:   打印多个值之间的分隔符,默认为空格
        end:   每一次打印的结尾,默认为换行符
        flush: 立即把内容输出到流文件,不作缓存
        """
    f = open('tmp_file','w')
    print(123,456,sep=',',file = f,flush=True) #输出到文件里面
    
    
    import time   #打印一个进度条
    for i in range(0,101,2):
    time.sleep(0.1)
    char_num = i//2 #打印多少个'*'
    per_str = ' %s%% : %s ' % (i, '*' * char_num) if i == 100 else ' %s%% : %s'%(i,'*'*char_num)
    print(per_str,end='', flush=True)
    t = (1,2,3) #hash(o) o是参数,返回一个可hash变量的哈希值,不可hash的变量被hash之后会报错。
    l = [1,2,3]
    print(hash(t))  #可hash  2528502973977326415
    print(hash(l))  #会报错 TypeError: unhashable type: 'list'
    
    callable(o),o是参数/函数名,看这个变量是不是可调用。 #和调用相关的
    dir() 默认查看全局空间内的属性,也接受一个参数,查看这个参数内的方法或变量  #查看参数所属类型的所有内置方法
    
    序列——列表和元组相关的:list和tuple
    序列——字符串相关的:str,format,bytes,bytearry,memoryview,ord,chr,ascii,repr
    序列:reversed,slice
    l = (1,2,23,213,5612,342,43)
    print(l)
    print(list(reversed(l)))
    
    l = (1,2,23,213,5612,342,43)
    sli = slice(1,5,2)
    print(l[sli])
    # 匿名函数lambda
    t1 = (('a'),('b')) t2 = (('c'),('d')) # 下面3种方法 dic = [{i:j} for i,j in (zip(t1,t2))] #直接打印就行 test = lambda t1,t2:[{i:j} for i,j in zip(t1,t2)] #函数 打印取值时候要调用 test = list(map(lambda t:{t[0]:t[1]},zip(t1,t2))) #直接取值赋值变量test
    def multipliers():
        return [lambda x:i*x for i in range(4)] #改进的地方 是这里 []变小括号
    print(list(m(2) for m in multipliers()))
    
    # 下面是一个简单的分析
    lst = []
    def funcs():
        for i in range(4):
            def func(x):
                return i*x
            lst.append(func)
        return lst
    print(list(k(2) for k in funcs()))
    #测试递归  998  官方1000  定义:在一个函数里面调用自己本身
    def foo(n):
        print(n)
        n += 1
        foo(n)
    foo(1)
    import sys  #修改递归最大深度
    print(sys.setrecursionlimit(100000))
    menu = {
        '北京': {
            '海淀': {
                '五道口': {
                    'soho': {},
                    '网易': {},
                    'google': {}
                },
                '中关村': {
                    '爱奇艺': {},
                    '汽车之家': {},
                    'youku': {},
                },
                '上地': {
                    '百度': {},
                },
            },
            '昌平': {
                '沙河': {
                    '老男孩': {},
                    '北航': {},
                },
                '天通苑': {},
                '回龙观': {},
            },
            '朝阳': {},
            '东城': {},
        },
        '上海': {
            '闵行': {
                "人民广场": {
                    '炸鸡店': {}
                }
            },
            '闸北': {
                '火车战': {
                    '携程': {}
                }
            },
            '浦东': {},
        },
        '山东': {},
    }
    # def threeLM(dic):
    #     while True:
    #         for k in dic:
    #             print(k)
    #         key = input('input>>').strip()
    #         if key == 'b' or key == 'q':
    #             return key
    #         elif key in dic.keys() and dic[key]:
    #             ret = threeLM(dic[key])
    #             if ret == 'q':
    #                 return 'q'
    # threeLM(menu)
    下面是堆栈的实现 # l = [menu] # while l: # for key in l[-1]:print(key) # k = input('input>>').strip() # 北京 # if k in l[-1].keys() and l[-1][k]:l.append(l[-1][k]) # elif k == 'b':l.pop() # elif k == 'q':break
    各种序列的解压
    a,*_=(1,2,3,4) #a=1
    *_,d=(1,2,3,4) #d=4
    a,b,c = (1,2,3)
    a,b,c = [1,2,3]
    a,b,c = {1,2,3}
    a,_b= {'name':'Ray','age':11} #a=name b=age
    参数陷阱:默认参数是一个可变数据类型
    def func(x,lst=[]): 列表
        lst.append(x)
        print(lst)
    func('Ken') #['Ken']
    func('Ray') #['Ken', 'Ray']
    
    def func(x,dic={}): 字典
        dic.update(x)
        print(dic)
    func({'k':'v'}) #{'k': 'v'}
    func({'x':'m'}) #{'k': 'v', 'x': 'm'}
    
    def func(x,dic={1}): 集合
        dic.add(x)
        print(dic)
    func(2) #{1,2}
    func(3) #{1,2,3}
    *args  按位置传参,接收多余的参数,保存成元组形式
    **kwargs 按关键字传参,接收多余的,保存成字典形式 
    
    def 函数名(参数1,参数2,*args,默认参数,**kwargs):
            """注释:函数功能和参数说明"""
            函数体
            ……
            return 返回值
  • 相关阅读:
    CSS样式—绝对定位(absolute)与相对定位(relative)的区别(图示)
    firefox与IE透明度(opacity)设置区别
    nopCommerce学习之架构(三)
    nopCommerce学习之程序包(四)
    Hadoop 部署
    nopCommerce学习之汉化(二)
    PetShop 首页
    nopCommerce学习之安装配置(一)
    C# 中ToString()的用法
    对象的当前状态使该操作无效
  • 原文地址:https://www.cnblogs.com/zhangchen-sx/p/10952296.html
Copyright © 2020-2023  润新知