zoukankan      html  css  js  c++  java
  • 6-day6-函数-1

    增删改查 文件当作存放数据的仓库
    做个工具和用户交互,可以处理用户命令
    用户输入什么命令,就print什么命令
    def select(x,y,z):
        with open(z,'w',encoding='utf-8') as f:
            for line in f:
                if y in f:
                    print(line)
    def delete():
        print('delete func')
    def change():
        print('change func')
    def add():
        print('delete func')
    func_dic = {
        'select': select,
        'add': add,
        'change': change,
        'del': delete
    }
    
    while True:
        inp = input('>>: ').strip()
        if not inp:
            continue
        cmd_l = inp.split(' ')
        if cmd_l[0] in func_dic:
            func_dic[cmd_l[0]](cmd_l[0], cmd_l[1], cmd_l[2])
        else:
            print('无效命令')
        input('>>: ')
    

      函数参数的使用

    def func1():
        if 1 > 2:
            print('d')
        else:
            print('ok')
    
    func1()
    
    # 形参与实参
    # 形参是变量名 实参是1 2,形参函数内
    def foo(x,y):
        return  x+y
    
    foo(1,2)
    
    # 位置参数:按照从左到右的顺序一次定义的参数
    # 按位置定义的形参,必须被传值,多一个不行,少一个也不行
    # 按位置定义的实参,必须与形参一一对应
    
    # 关键字参数:参数在定义时,按照key=value进行定义,形参与实参不必一一对应
    func1(x=1, y=2, z=3)
    
    func1(1,y=2) #混合,位置实参必须在关键字实参前面
    # 一个形参只能被传值一次
    
    # 默认参数:在定义函数阶段,就已经为形参赋值,调用阶段就无需传值。
    def func1(x, y=10)
    # 默认参数,必须放在位置形参后面
    def func1(x=10, y)   #不行!
    # 默认参数通常要定义成不可变类型,只在定义阶段赋值一次
    
    #可变长形参-分两种
    def func2(x,y,*args):  #多余的参数存储在元组里
        print(x,y)
        print(args)
    func2(1,2,3,4,5,6)
    func2(1,2,*(3,4,5,6))   #注意这种幅值方法
    
    func2(*('a','b','c'))  == func2('a','b','c')
    
    def func3(x,y,**kwargs): # 多余的参数放在字典里 #多余的关键字参数被**接受,传给kwargs
        print(x,y)
        print(kwargs)
    func2(y=2,x=1,z=3,a=5)
    
    
    
    #命名关键字参数 #放置出现异常# 实参必须要以关键字传值
    def register(*,name,age):
        print(age)
        print(name)
    register(age=18)
    register(name='alex',age=21)
    
    def register(*args,name,age):
        print(age)
        print(name)
    register(1,2,3,4,name='egon',age=10)
    

      函数对象

    # 可被引用
    f = func()
    
    # 可以当作函数的参数
    
    # 可以当作函数的返回值
    
    
    def foo():
        print('from foo')
    
    
    def bar():
        return foo
    f = bar()
    print(f)
    
    # 可以当作容器类型的元素: 字典,value为函数名
    
    
    def select():
        print('select function')
    
    
    func_dict={
        'select':select
    }
    
    func_dict['select']()
    
    #
    x = 0
    
    
    def f1():
        x = 1
    
        def f2():
            x = 2
            print(x)
        return f2
    
    f = f1()
    print(f)
    f()
    
    
    x = 1
    def func1():
        x = 2
        def fun2():
            x = 3
            def fun3():
                #global x
                nonlocal x
                x = 10000
                print(x)
            fun3()
            print(x)
        fun2()
    
    func1()
    

      名称空间和作用域

    # 名称空间 :存放名字与值的绑定关系
    # 名称空间分为三种:
    
    # 内置名称空间:python解释器自带的名字,解释器启动就生成空间
    
    # 全局名称空间:文件级别定义的名字都会存放在全局名称空间,执行python文件时会产生,顶头写的定义
    x = 1
    def fun1():
    
    class Foo:
        pass
    import os
    os.name
    
    # 局部名称空间:定义在函数内部的名字,在函数调用阶段才会生效
    
    #三者的加载顺序: 内置——全局--局部。
    # 取值  内部函数顺序:局部-内置-全局
    
    
    
    
    # 作用域:作用范围(生效分为)
    x = 0
    def f1():
        x = 1
        def f2():
            x = 2
            def f3():
                x = 3
                print(x)
            f3()
        f2()
    
    f1()
    # 全局作用域: 内置名称空间和全局名称空间的名字属于全局范围,在整个文件任意位置都能被调用,全局有效
    def foo(x,y):
        print(max(x,y))
    foo(12,23)
    
    # 局部作用域: 局部名称空间的名字,属于局部范围,只在函数内,局部有效
    
    def foo(x,y):
        def maxx(x,y):
            if x > y:
                return x
            else:
                return y
        print(maxx(x,y))
       # print(globals())
        print(locals())
    foo(12,23)
    
    # 局部作用域-->全局作用域
    print(globals())
    print(dir(globals()['__builtins__']))
    print(locals())
    print(globals() is locals()) # 全局的局部是全局
    

      

  • 相关阅读:
    Python环境搭建详解(Window平台)
    扎心了Python
    解决Git
    Android入门教程(四)
    HEXO快速搭建自己的博客
    每日Android一问等你来解答-什么是Activity的生命周期?
    如何才能够系统地学习Java并发技术?
    LeetCode刷题指南(字符串)
    学生时代的最后一个新年,请一定要做这五件事
    20位程序员关于求职的疑问,以及我给出的参考答案
  • 原文地址:https://www.cnblogs.com/cx2c/p/7050132.html
Copyright © 2011-2022 走看看