一.函数及其调用
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。
我们可以定义一个由自己想要功能的函数,以下是简单的规则:
1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。
任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
2.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
3.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于
返回None.
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。
这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。调用函数时的参数,为实际参数。
二.参数
调用函数时可使用的正式参数类型:
2.1.必备参数
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样,不然会出现语法错误。
2.2.关键字参数(使用<键-值>来传参)
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
2.3.默认参数
调用函数时,默认参数的值如果没有传入,则被认为是默认值。
注意:所有位置参数必须出现位于参数列表的最后面;
默认参数的值只在定义时被设置计算一次,如果函数修改了对象,默认值就被修改了。
2.4.不定长参数(可变长参数)
你可能需要一个函数能处理比当初声明时更多的参数。这些参数叫做不定长参数,和上述2种参数不同,声明时不会命名。
基本语法如下:
def functionname([formal_args,] *var_args_tuple ):
"函数_文档字符串"
function_suite
return [expression]
加了星号(*)的变量名会存放所有未命名的变量参数。选择不多传参数也可
2.5变量作用域
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。
eg:
total = 0; # 这是一个全局变量
def sum( arg1, arg2 ):
#返回2个参数的和."
total = arg1 + arg2; # total在这里是局部变量.
print(tota1)
return total;
#调用sum函数
sum( 10, 20 );
print (total)
30,0
2.5 函数的递归调用
前提:
1.原问题可以层层分解为类似的子问题,且子问题比原问题规模更小。
2.规模小的问题具有直接解。
方法:
1.寻找分解方法:将原问题转换为子问题求解。
2.设计递归出口:根据规模最小的子问题确定递归终止条件。
eg:求一个数x的n次方:
def custom_pow(x,n):
if x==0:
return 0
if n==0:
return 1
return x*custom_pow(x,n-1)
x= int(input('请输入x的值:'))
n = int(input('请输入n的值:'))
m = custom_pow(x,n)
print('x的n次幂的结果是:')
print(m)
三. Python中的文件操作
Python提供了文件对象,并内置了open函数来获取一个文件对象。Open函数的使用:file_object = open(path,mode)。其中,file_object是调用open函数后得到的文件对象;path是一个字符串,代表要打开文件的路径;而mode是打开文件的模式,常用的模式如下表所示:
文件模式 | 解释 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
参数中的[]符号表示括号中的值可以传递也可以不传递
方法 | 作用/返回 | 参数 |
f.close() | 关闭文件:用open()打开文件后使用close关闭。 | 无 |
f.read([count]) | 读出文件:读出count个字节。如果没有参数,读取整个文件 | [count] |
f.readline() | 读出一行信息,保存于list:每读完一行,移至下一行开头。 | 无 |
f.readlines() | 读出所有行,保存在字符串列表中。 | 无 |
f.truncate([size]) | 截取文件,使文件的大小为size。 | [size] |
f.write(string) | 把string字符串写入文件。 | 字符串 |
f.writelines(list) | 把list中的字符串写入文件,是连续写入文件,没有换行。 | 字符串 |
Python中文件操作的常用方法读写操作是文件操作的最主要的操作,下面将主要讲解表中的f.readline()、f.readlines()和f.writelines(list)方法。
实例1:将文件Task1的内容全部读入到fls列表中。
#<程序:读取文件os.py>
f = open("./Task1.txt",'r');
fls = f.readlines()
for line in fls:
line = line.strip(); print (line)#删除空格
f.close()#都要加一个
实例二:要将文件首字符为“3”的行中每一个数字加起来,不包括3,即“10 5 19 20 37”;然后,将结果写入到文件末尾。
#<程序:读取文件os.py,计算并写回>
f = open("./Task1.txt",'r+'); fls = f.readlines()
for line in fls:
line = line.strip()
lstr = line.split()
if lstr[0] == '3':
res = 0
for e in lstr[1:]:
res+=int(e)
f.write('\n4 '+str(res));
f.close()
例:从键盘输入若干个字符串,逐个将它们写入文件e:\lfile1.txt的尾部,直到输入*时结束,然后从该文件中逐一读出字符串,并在屏幕上显示出来。
(1):
a_list=[ ]
while True:
s=input()
if s=="*"1:
break
a_list.append(s+'\n')
f1=open("./fate.txt" , "a")
f1.writelines(a_list)
f1.close()
f2=open("./fate.txt","r")
fls=f2.readlines()
for line in fls:
print(line,end="\n")
f2.close
(2) :
f1=open("./fate.txt" , "w")
while True:
str=input("请输入字符串:")
if str="*":
break;
else:
f1.write(str+"\n")
f1.close()
f2=open("./fate.txt","r")
fls=f2.readlines()
for line in fls:
print(line,end="\n")
f2.close