初识函数及文件操作
1. 函数的基本作用
- 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可
- 面向对象:对函数进行分类和封装,让开发“更快更好更强...”
函数式编程最重要的是增强代码的重用性和可读性
2. 定义和使用
def
函数名(参数):
...
函数体
...
返回值
函数的定义主要有如下要点:
- def:表示函数的关键字
- 函数名:函数的名称,日后根据函数名调用函数
- 函数体:函数中进行一系列的逻辑计算,如:发送邮件、计算出 [11,22,38,888,2]中的最大数等...
- 参数:为函数体提供数据
- 返回值:当函数执行完毕后,可以给调用者返回数据
return值是用来给调用者的。
在函数中,一旦执行了return,函数执行过程立即终止。
在未设置return值得时候,自动返回none。
3.参数
(1)普通参数(严格按照顺序,将实际参数赋值给形式参数)
(2)默认参数(必须放到最后)
(3)指定参数(将实际参数赋值给制定的形式参数)
(4)动态参数
* 默认将传入的参数,全部放置在元组中(以元组传入)
**默认将传入的参数,全部放置在字典中(以字典传入)
def f1(*args): #
print(args,type(args))
li = [11,22,'hahah']
f1(li)
f1(*li)结果:([11, 22, 'hahah'],) <class 'tuple'>
(11, 22, 'hahah') <class 'tuple'>
def f1(**args): # 以字典传入
print(args,type(args))
f1(n1="haha", n2=18)
dic = {'k1':'v1','k2':'v2'}
f1(kk=dic)
f1(**dic) # 直接赋值args结果:{'n2': 18, 'n1': 'haha'} <class 'dict'>
{'kk': {'k2': 'v2', 'k1': 'v1'}} <class 'dict'>
{'k1': 'v1', 'k2': 'v2'} <class 'dict'>
(5)万能参数 *args在前 **kwargs在后
str format 格式化输出
s1 = "I am {0}, age{1}".format('haha', 18)
print(s1)
s2 = "I am {0}, age{1}".format(*['haha', 18])
print(s2)结果:I am haha, age18
I am haha, age18
s1 = "I am {name}, age{age}".format(name='haha', age=18)
print(s1)
dic = {'name': 'haha', 'age':18}
s2 = "I am {name}, age{age}".format(**dic)
print(s2)结果:I am haha, age18
I am haha, age18
函数参数传递说明:传递的是引用值。即同一值在内存中,只有一个位置
def f1(a1):
a1.append(999)
li = [11,22,33,44]
f1(li)
print(li)结果:[11, 22, 33, 44, 999]
全局变量,所有的作用域都可读。优先使用自己域中
对全局变量进行重新赋值,需要global
特殊:列表、字典。可修改,不可重新赋值
全局变量----大写
4. 小细节
函数与函数之间加两行空格------PEP8
读取文件每一行的时候 加上.strip()--去掉换行符及空格
5. 三元运算/三目运算
if 1==1:
name = 'alex'
else:
name = 'hahah'等同:
name = 'alex' if 1 == 1 else 'hahah'
6. Lambda表达式
针对简单赋值函数,简化
def f1(a1):
return a1 + 100等同:
f2 = lambda a1: a1 + 100
7. 内建函数
[], '', 0, False
all() # 里面每一个均为真,则为真,有一个为假,则为假any() # 只要有真,则为真
bin() # 将传进去的10进制转为2进制 0b—>二进制
oct() # 转为8进制 0o—>八进制
hex() # 转为16进制 0x—>十六进制
字符串转换字节类型
bytes(只要转换的字符串,按照什么编码)
n = bytes("李杰", encoding="utf-8")
print(n)
n = bytes("李杰", encoding="gbk")
print(n)
字节转化成字符串
new_str = str(bytes("李杰", encoding="utf-8"), encoding="utf-8")
8. 文件操作
f = open("db", 'r+', encoding = "utf-8")
# 如果打开模式为r+,无b,则read按照字符读取
f.tell()
# tell当前指针所在的位置(字节—>一个汉字,三个字节)
f.seek()
# 调整当前指着的位置(字节)
f.seek(f.tell())
# 当前指针位置开始覆盖
f.flush() # 强制刷新
f.truncate() # seek位置,清空后面数据