zoukankan      html  css  js  c++  java
  • python-study-16

    函数总结

    '''
    1、什么是函数
        函数就是具备某一特定功能的工具
    2、为什么用函数
        减少重复代码
        增强程序的扩展性
        增强可读性
    3、如何用函数
        1、函数的使用原则:先定义后调用(*****)
            定义阶段:只检测语法不执行代码
            调用阶段:执行函数代码
        2、定义阶段与调用阶段:
            2.1:语法 (*****)
                def func(参数1,参数2,...):
                    """文档注释"""
                    code1
                    code2
                    code3
                    return 返回值
            2.2 形参与实参 (*****)
                形参本质就是变量名
                实参本质就是变量的值
    
                形参:
                    位置形参
                        def foo(x,y):
                            pass
                    默认形参
                        def foo(x,y=1):
                            pass
                    *args
                        def foo(x,*args):
                            pass
                    **kwargs
                        def foo(x,**kwargs):
                            pass
                实参:
                    位置实参
                        foo(1,2,3,4)
                    关键字实参
                        foo(x=1,y=2,z=3)
                        foo(x=1,1) # 错误
                        foo(1,x=1) #错误
                    *可迭代的对象
                        foo(*'hello')
                    **字典
                        foo(**{'x':1,'y':2})
    
            2.3 返回值(*****)
    
                return是函数结束的标志,函数内可以有多个return,但只要执行一次函数就立刻结束
                并且把return后的值当作本次调用结果返回
    
                def foo(x,y):
                    return x+y
    
                res=foo(1,2)
    
                注意:
                    1、返回值可以是任意类型
                    2、返回值没有个数限制
                        函数内没有return:默认返回None
                        return 值1:返回该值
                        return 值1,值2,值3:返回(值1,值2,值3)
    
        3、函数对象(*****)
            def foo():
                pass
            函数可以被当作数据去处理
            1、引用
                f=foo
            2、当作参数
                print(foo)
            3、当作返回值
                def bar():
                    def wrapper()
                        pass
                    return wrapper
    
                f=bar()
            4、当作容器类类型的元素
                def f1():
                    pass
                def f2():
                    pass
    
                l=[f1,f2]
                l[0]()
    
                func_dic={
                    'f1':f1,
                    'f2':f2
                }
    
        4、函数嵌套(*****)
            4.1 函数的嵌套调用
                def foo()
                    bar()
                    f1()
                    f2()
                foo()
            4.2 函数的嵌套定义
                def f1():
                    def f2():
                        pass
                    f2()
    
        5、名称空间与作用域(******)
            内置名称空间
            全局名称空间
            局部名称空间
                def foo(x,y): #x=1,y=2
                    pass
                foo(1,2)
    
            加载顺序:内置->全局-》局部
            查找名字的顺序:从当前位置往上查找
                如果当前位置在局部
                局部—》全局-》内置
    
            x=1
            def outter():
                def wrapper():
                    print(x)
                return wrapper
            f=outter()
    
            def bar():
                x=111111
                f()
    
            全局作用域:全局存活,全局有效
                内置+全局
            局部作用域:临时存活,临时有效
                局部
    
            l=[]
            n=100
            def foo():
                l.append(1111)
                global n
                n=1
    
    
            def f1():
                x=1
                def f2():
                    def f3():
                        nonlocal x
                        x=10
    
            globals()
            locals()
        6、闭包函数(****)
            x=1
            def outter():
                x=10
                def wrapper():
                    print(x)
                return wrapper
            f=outter()
    
        7、装饰器(****)
            def deco(func):
                def wrapper(*args,**kwargs):
                    res=func(*args,**kwargs)
                    retutrn res
                return wrapper
    
    
            def deco1(x=1,y=2):
                def deco(func):
                    def wrapper(*args,**kwargs):
                        res=func(*args,**kwargs)
                        retutrn res
                    return wrapper
                return deco
    
    
            @deco
            def index():
                pass
    
        8  迭代器(****)
            for
            max
            min
            sorted
            filter
            map
    
        9  生成器(***)
    
        10 三元表达式、列表推导式,字典生成式,生成器表达式(*****)
    
            res=条件成立的结果 if 条件 else 条件成立的结果
            l=[表达式 for i in 可迭代对象 if 条件]
            g=(表达式 for i in 可迭代对象 if 条件)
            d={k:v for i in 可迭代对象 if 条件}
    
        11 匿名函数(*****)
            lambda 参数1,参数2:表达式
    
            max
            min
            sorted
            map
            filter
    
        12 内置函数
    
        13 函数递归(****)
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    '''
    
    
    def deco1(func1): #func1=wrapper2
        def wrapper1(*args, **kwargs):
            print('第一个装饰器')
            res1 = func1(*args, **kwargs)
            return res1
        return wrapper1
    
    def deco2(func2): #func2=最原始的index
        def wrapper2(*args, **kwargs):
            print('第二个装饰器')
            res2 = func2(*args, **kwargs)
            return res2
        return wrapper2
    
    
    @deco1 #index=deco1(wrapper2)=wrapper1
    @deco2 # index=deco2(index)=wrapper2
    def index():
        print('from index')
    
    index()
    '''
    第一个装饰器
    第二个装饰器
    from index
    '''
    View Code

    面向过程编程

    '''
    面向过程编程
        核心过程二字,过程指的是解决问题的步骤,即先干什么、再干什么、然后干什么...
        基于该思想编写程序就好比在设计一条流水线,是一种机械式的思维方式
    
        优点
            复杂的问题流程化、进而简单化
        缺点
            扩展性极差
    
    '''
    
    # 接收用户输入用户名,进行用户名合法性校验,拿到合法的用户名
    def check_user():
        while True:
            name = input('username>>').strip()
            if name.isalpha():
               return name
            else:
                print('用户名必须为字母,傻叉')
    
    # 接收用户输入密码,进行密码合法性校验,拿到合法的密码
    def check_pwd():
        while True:
            pwd1=input('password>>: ').strip()
            if len(pwd1) < 5:
                print('密码的长度至少5位')
                continue
            pwd2=input('again>>: ').strip()
            if pwd1 == pwd2:
                return pwd1
            else:
                print('两次输入的密码不一致')
    
    def check_age():
        pass
    
    # pwd=check_pwd()
    # print(pwd)
    # 将合法的用户名与密码写入文件
    def insert(user,pwd,age,path='db.txt'):
        with open(path,mode='a',encoding='utf-8') as f:
            f.write('%s:%s:%s
    ' %(user,pwd,age))
    
    def register():
        user=check_user()
        pwd=check_pwd()
        age=check_age()
        insert(user,pwd,age)
        print('register successfull')
    
    register()
    
    
    
    # 用户功能层
    def register():
        while True: # 检测用户名
            name=input('username>>: ').strip()
            #检测用户是否重复,如果重复了则重新输入,否则break
            res=check_user_interface(name)
            if res:
                print('用户存在')
            else:
                break
    
        while True: # 检测密码
            pwd1 = input('pwd1>>: ').strip()
            pwd2 = input('pwd2>>: ').strip()
            if pwd1 != pwd2:
                print('两次输入密码不一致,重新输入')
            else:
                break
    
    
    
    
    def tell_info():
        name=input('>>: ').strip()
        info=select(name)
        print(info)
    
    # 接口层
    def check_user_interface(name):
        res = select(name)  # res=['egon','123']
        if res:
            return True
        else:
            return False
    
    
    # 数据处理层
    def select(name):
        with open('db.txt', 'r', encoding='utf-8') as f:
            for line in f:
                info = line.strip('
    ').split(':') #info=['egon','123']
                if name == info[0]:
                    return info
    View Code


    模块的使用

    '''
    1、什么是模块
        模块是一系列功能的集合体
        常见的模块形式(自定义模块、第三方模块、内置模块):
            1、一个module.py文件就是一个模块,文件名是module.py,而模块名是module
            2、一个包含有__init__.py文件的文件夹也是模块
    
            3、已被编译为共享库或DLL的C或C++扩展
            4、使用C编写并链接到python解释器的内置模块
    
    
    2、为什么要用模块
        1、用第三方或者内置的模块是一种拿来主义,可以极大地提升开发效率
        2、自定义模块即将我们自己程序中需要用到的公共的功能写入一个python文件
            然后程序的各部分组件可以通过导入的方式来引用/重用自定义模块中的功能
    
    
    
    3、如何用模块
        导入的方式有两种
        import 模块名
        from 模块名 import 具体的功能
    
    '''
    View Code


    模块的搜索路径

    一个py文件就是一个模块,在导入时必须从某一个文件夹下找到该py文件
    模块的搜索路径指的就是在导入模块时需要检索的文件夹们
    
    导入模块时查找模块的顺序是:
        1、先从内存中已经导入的模块中寻找
        2、内置的模块
        3、环境变量sys.path中找
            强调:sys.path的第一个值是当前执行文件的所在的文件夹
    View Code


    python文件的两种用途

    一:可以被当作脚本去执行
    
    二:可以被当作模块导入
    View Code


    软件开发的目录规范

  • 相关阅读:
    201521123069 《Java程序设计》 第13周学习总结
    201521123069 《Java程序设计》 第12周学习总结
    网络15软工个人作业5--软件工程总结
    个人作业4--alpha阶段个人总结
    软工网络15个人作业3——案例分析
    软件工程网络15结对编程作业1
    201521123004《软件工程》个人阅读作业2-提问题
    201521123004《软件工程》个人阅读作业1
    Java课程设计—学生成绩管理系统(201521123004-林艺如)
    201521123004 《Java程序设计》第 14 周学习总结
  • 原文地址:https://www.cnblogs.com/xujinjin18/p/9189056.html
Copyright © 2011-2022 走看看