python零基础学习1-基础知识6-字符编码与函数
字符编码
- 所有编码(unicode除外)之间的转换, 都要先转成unicode
- unicode和GBK之间是不互相兼容的

函数
1.概述
1) 编程方法的分类
- 面向对象: 类 class
- 面向过程: 过程 def 函数式编程: 函数 def (Fuctional Programming)
- 函数没有变量, 没有副作用, 输入是确定的, 输出就是确定的
- 主要思想是把运算尽量写成一系列嵌套函数的调用
- 更接近数学运算. 如lisp语言
2) 函数的优点
- 代码重用
- 保持一致性
- 可扩展性
3) 函数及过程的定义
#定义一个函数 def test(x): "函数的描述balabala" x+=1 return x #定义一个过程; 正常定义中, 过程是没有返回值的函数, 但在python中, 会返回None def test1(): "过程的描述balabala" pass
5) 函数的调用
- 函数在被调用之前必须先定义
y=test(5)
2. return
- 函数内部return之后会中止当前函数运行
- 返回值可以直接赋予变量
- 返回值的个数及类型都不确定
- 可将多个变量赋予一个元组进行返回. eg. return 1, "hello", ["alex","bell"], {"name":"alex"}
- 也可以返回函数 eg.return func_name # 返回函数的内存地址
3. 参数
- 函数定义时指定的参数为形参
- 函数调用时传入的参数为实参
1) 位置调用 (实参与形参一一对应)
def test(x, y): "计算两个数的加和" return x+y a=test(1, 2)
2) 关键字调用 (与形参顺序无关)
def test(x, y): return x-y a=test(y=3, x=8)
3) 默认参数: 提前为形参赋值, 调用时默认参数不是必传
def test(x, y=20): return x-y a=test(100)
4. 参数组
def test(*args): print(*args) test(1, 2, 3, 4, 5, 6) test(*[7, 8, 9, 10, 11, 12]) #执行结果: # 1 2 3 4 5 6 # 7 8 9 10 11 12
def test(x, *args): print(x) print(*args) test(1, 2, 3, 4, 5, 6) #执行结果: # 1 # 2 3 4 5 6
**kwargs可接收N个关键字参数并转换成字典的形式
def test(**kwargs): print(kwargs) test(name="alex",age=22, sex="M") #执行结果: # {'name': 'alex', 'age': 22, 'sex': 'M'}
def test(no,**kwargs): print(no,kwargs) test("p001",name="alex",age=22, sex="M") #执行结果: # p001 {'name': 'alex', 'age': 22, 'sex': 'M'}
5. 作用域, 局部与全局变量
def change_name(name): print("before:",name) name="bell" #局部变量, 只在函数里生效; 该函数为该变量的作用域 print("after:", name) name="alex" change_name(name) print(name) #执行结果: # before: alex # after: bell # alex
- 在函数中操作全局变量的方法------------不要这么用
name="alex" def change_name(): global name name="bell" print(name) change_name() print(name) #执行结果: # alex # bell
- 当全局变量为数字, 字符串时, 函数内部不能更改
- 但当全局变量为列表, 字段, 集合, 类时, 函数内部可以更改
def change_name(): a[0]="eva" a=["alex","bell","maple"] change_name() print(a) #执行结果: # ['eva', 'bell', 'maple']
6. 递归: 在一个函数内部调用其本身
- 必须有明确的结束条件
- 进入下一层递归时, 问题规模应有所减小
- 效率不高, 可能会导致栈溢出
- 最大递归次数为999次
def calc(n): print(n) if n/2>=1: return calc(n/2) calc(10)
7. 高阶函数: 函数参数可接收变量, 也可以接收另一个函数
def add(a, b, f): return f(a)+f(b) print(add(3, -6, abs)) #执行结果: # 9
浙公网安备 33010602011771号