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()) # 全局的局部是全局

  

posted @ 2017-06-19 19:09  ccccdc  阅读(95)  评论(0编辑  收藏  举报