函数
函数能提高应用的模块性,和代码的重复利用率。
定义
def 函数名(参数列表):
函数体
参数
- 关键字参数
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
def person( name, age ):
print ("名字: ", name)
print ("年龄: ", age)
person( age=10, name="python" )
运行结果
名字: python
年龄: 10
- 默认参数
调用函数时,如果没有传递参数,则会使用默认参数
def add( a, b = 0 ):
"求和"
print (a + b)
return
add(1 + 2)
add(1)
运行结果
3
1
- 不定长参数
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
变量作用域
变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:
- L (Local) 局部作用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局作用域
- B (Built-in) 内置作用域(内置函数所在模块的范围)
以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内置中找。
-
局部变量和全局变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。 -
global和nonlocal关键字
局部作用域内修改全局变量需要用到global关键字
num = 1
def fun1():
global num # 外部全局变量引用
print(num)
num = 123
print(num)
fun1()
print(num)
运行结果
1
123
123
修改嵌套作用域中的变量则需要 nonlocal 关键字
def outer():
num = 10
def inner():
nonlocal num # 引用outer()中定义的变量num
num = 100
print(num)
inner()
print(num)
outer()
运行结果
100
100
返回值
return [表达式] 语句用于退出函数,不带参数值的return语句返回None
文件
打开文件
open() 方法用于打开一个文件,并返回文件对象,如果文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
mode种类有:
模式 | 说明 |
---|---|
t | 文本模式 (默认) |
x | 写模式,新建一个文件,如果该文件已存在则会报错 |
b | 二进制模式 |
+ | 打开一个文件进行更新(可读可写) |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件对象操作
- close()
关闭文件 - flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 - readline([size])
读取整行,包括 “\n” 字符。 - readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
对excel及csv文件进行操作
- excel
使用前需安装第三方库:xlrd,xlwt,xlutils等
xlrd只能进行读操作
import xlrd, xlwt
#读取
rows = []
book = xlrd.open_workbook('testdata.xlsx')
sheet = book.sheet_by_index(0)
for user in range(1, sheet.nrows):
rows.append(list(sheet.row_values(user, 0, sheet.ncols)))
print(rows)
#写入
rows1 = [['Name', 'Age'],['python', 0],['java', 1]]
book1 = xlwt.Workbook()
sheet1 = book1.add_sheet('user')
for i in range(0, 3):
for j in range(0, len(rows1[i])):
sheet1.write(i, j, rows1[i][j])
book1.save('testdata1.xls')
- csv
读取csv文件
import csv
with open('testdata.csv', 'r') as csv_file:
reader = csv.reader(csv_file)
next(csv_file, None)
for user in reader:
print(user)
从字典写入csv文件
dic = {'name':pyhon, age:10}
csv_file = open('testdata1.csv', 'w', newline='')
writer = csv.writer(csv_file)
for key in dic:
writer.writerow([key, dic[key]])
csv_file.close()
csv_file1 = csv.reader(open('testdata1.csv','r'))
for user in csv_file1:
print(user)
os模块
os 模块提供了非常丰富的方法用来处理文件和目录。
- os.chmod(path, mode) 更改权限
- os.getcwd() 返回当前工作目录
- os.makedirs(path[, mode]) 递归创建文件夹
- os.path模块,主要用于获取文件的属性
具体待完善
datetime模块
datetime模块定义了下面这几个类:
- datetime.date 表示日期的类。常用的属性有year, month, day
- datetime.time 表示时间的类。常用的属性有hour, minute, second, microsecond
- datetime.datetime 表示日期时间
- datetime.timedelta 表示时间间隔,即两个时间点之间的长度
- datetime.tzinfo 与时区有关的相关信息
具体待完善