6-day6-函数-1

增删改查 文件当作存放数据的仓库
做个工具和用户交互,可以处理用户命令
用户输入什么命令,就print什么命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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('>>: ')

  函数参数的使用

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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)

  函数对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# 可被引用
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()

  名称空间和作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 名称空间 :存放名字与值的绑定关系
# 名称空间分为三种:
 
# 内置名称空间: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 @   ccccdc  阅读(95)  评论(0编辑  收藏  举报
编辑推荐:
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
阅读排行:
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 本地部署DeepSeek后,没有好看的交互界面怎么行!
· 趁着过年的时候手搓了一个低代码框架
· 推荐一个DeepSeek 大模型的免费 API 项目!兼容OpenAI接口!
· 用 C# 插值字符串处理器写一个 sscanf
点击右上角即可分享
微信分享提示