python3 函数传参练习 全局变量与局部变量 的理解
额 还是继续抄一边NLP第二条:
2.一个人不能控制另外一个人
一个人不能改变另外一个人,一个人只能改变自己。
每个人的信念,价值观,规条系统只对本人有效,不应强求别人接守。
改变自己,别人才会有可能改变。
一个人不能推动另外一个人,每个人都只可以自己推动自己。
找出对方的价值观,创造,增大或转移对方在乎的价值,对方便会产生推动自己的行为。
一个人因此不能“教导”另外一个人,一个人只能引导另外一个人取学习。
因此一个人不能希望另外一个人放弃自己的一套信念,价值观和规条系统,而去接受另外的一套。
好的动机只给一个人取去做某一件事的原因,但是不能给他控制别人,或使事情恰如他所愿发生的权利。
不强迫别人跟随自己的一套信念,价值观和规条,别人便不会抗拒。
同样的,我们只能自己推动自己。
唉,还有点儿看不懂。。。。。
先来几个Pycharm的快捷键 炒鸡好用!!!
Ctrl + 鼠标左键 可以来回看函数调用
Shift + Enter 快速换行
Ctrl + d 复制一行
Ctrl +y 删除一行
Ctrl + / 注释一行或所选多行
Shift + Tab 所选多行后退一个缩进
函数的三大性质:减少重复代码 使程序变得可扩展 使程序变得易维护
三大编程方式:面向对象方法(Python) 面向过程方法(C) 函数式编程(Erlang)
核心 类(class) 无返回值函数 有返回值函数
草稿如下。。。
1 #!usr/bin/env/ python 2 # -*- coding:utf-8 -*- 3 # Author: XiaoFeng 4 5 a = 1, 2, 3 # 这样赋值,结果是元组输出 理解这点很关键 下面都得用!!! 6 print(a) 7 print("-" * 50) 8 9 10 def test(): # 这是无参函数 也叫面向过程 11 print("呀哈哈哈哈") 12 # 没有return 所以也叫面向过程 13 14 15 t = test() 16 print(t) # 返回空 17 print("-" * 50) 18 19 20 def test0(): 21 print("呀哈哈哈哈") 22 return 1, "a", ["list"], {"ket": "value"} 23 # 啥都能返回 以元组打包的形式返回 24 25 26 t = test0() 27 print(t) 28 print("-" * 50) 29 30 31 def test1(x, y, z): # x,y,z是位置参数 赋值与实参位置有关 32 print(x) 33 print(y) 34 print(z) 35 return "test" # 有返回值 即为函数式编程 只有一个数据的时候就不打包了 36 37 38 t2 = test1(1, 2, 3) # 第一种输入方式 按顺序赋值 39 print(t2) 40 print("-" * 50) 41 t3 = test1(y=1, x=2, z=3) # 关键字赋值 想咋输咋输,不用在乎顺序 42 print("-" * 50) 43 # t4 = test2(y=1,2,3) 这就不对 这样写y现在是元组了 44 t5 = test1(1, z=2, y=3) # 这样混着用, 45 print("-" * 50) 46 # t5 = test2(z=2, 1, y=3) 这就不行 那不就是z 变成元组了么 47 # 所以想混着用,那就得把关键字放后面,前面的按顺序 48 49 50 def test2(x, y=1): # 默认形参 51 print(x) 52 print(y) 53 54 55 test2(2) # 默认形参可不传值给他 56 test2(2, y=2) # 以关键字赋值的方式改默认 57 test2(2, 2) # 这样也可以。。 58 print("-" * 50) 59 60 61 def test3(x, *args, y=0): # 传参数组 想传几个就传几个 然后以元组方式打包起来 62 print(x) # 按位置传值 相对应的位置就传给位置参数 63 print(y) 64 print(args) 65 66 67 test3(1, 3, 4, "5", 9, y=1) # 只要用关键字赋值,那就就必须放在最后面 原因在最上面 68 print("-" * 50) 69 70 71 def test4(x, y=0, **kwargs): # 也是传参数组,不过是用字典包起来 72 print(x) 73 print(y) 74 print(kwargs) # 传参时用关键字赋值,以关键字作key 75 76 77 test4(2, y=3, name="xiaofeng", age=20) # 注意字典的key不要与默认的形参重名
然后是全局变量,局部变量的区分 草稿如下。。。
1 #!usr/bin/env/ python 2 # -*- coding:utf-8 -*- 3 # Author: XiaoFeng 4 5 global_x = 1 # 定义全局变量最好加个global 在最上面定义 6 # 事实证明这也不过是个变量,是可以改的 但是咱不改他 7 8 9 def test(): 10 x = 3 # 局部变量 只在函数内起作用,函数结束就没了
global global_x # 非要改全局变量 那就先global声明一下就能改了
global_x = 6
11 print(x) 12 print(global_x) 13 14 15 test() 16 print(global_x) 17 18 # 递归函数 特点是 要有结束条件 问题规模应该减小 效率低 19 20 21 def test1(n): 22 if n > 0: 23 print(n) 24 return test1(int(n/2)) 25 26 27 test1(20) 28 29 30 def test2(a, b, f): # 高级函数 就是把函数名传到函数里用。。。这是要干啥 31 z = f(a) - f(b) 32 print(z) 33 34 35 test2(4, -8, abs)
作业如下。。。。。。。。真不会写 头大
1 #!usr/bin/env/ python 2 # -*- coding:utf-8 -*- 3 # Author: XiaoFeng 4 5 6 def print_list(): 7 for index, i in enumerate(list1): 8 print(index, i) 9 10 11 def search(find_str): 12 with open("config_test", "r", encoding="utf-8") as f: 13 for line in f: 14 if find_str == line: 15 line = next(f) 16 print(line) 17 # while "serve" in line: 18 # line = next(f) 19 # print(line) 20 21 """ 22 def add(): 23 with open("config_test", "a+", encoding="utf-8") as f, \ 24 open("config_test1", "w+", encoding="utf-8") as f2: 25 for line in f: 26 if arg[""] == line: 27 line = next(f) 28 print(line) 29 f2.write(line) 30 """ 31 32 33 list1 = ["search", "add", "update", "delete"] 34 while True: 35 choice = input("请输入操作选择:") 36 if choice == "0": 37 find_str0 = "backend "+input("请输入您要查询的内容:") + "\n" 38 search(find_str0) 39 # if choice == "1": 40 # arg = eval(input("请输入您要写入的内容:")) 41 # add(arg)