python从零进阶之路——day3,文件读写,函数

时间:2023-02-13 22:38:55

文件读写:

# author:zingerman
f  = open('testfile','a',encoding='utf-8')#'r':只读   'w':只写    'a':增加    f其实就是一个文件的句柄,是文件的内存地址
 #data=f.read() #读文件的内容  ()内可指定参数,(10)表示读取十个字符,默认读所有内容

#print(data)

#f.write('22222') #当为‘w’覆盖旧文件,并写入内容,返回文件大小

f.write('33333') #当为'a' 在文件末尾写入内容,不覆盖旧文件
# author:zingerman
f  = open('testfile','r',encoding='utf-8')
'''
for i  in range(7):
    print(f.readline())    #从文件读取整行,包括 "\n" 字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 "\n" 字符
 
for index ,line in enumerate(f.readlines()):
    if index==2:
        print('-----我是分割符-----')            #插入分割符
        continue
    print(line.strip())                         #取出每行的索引,循环打印
'''
for i in f:  #这是的f就是一个迭代器  写入一行时,把上一行在内存中删除,而上面的方法是把整个文件读入内存中
    print(i)

 文件操作方法:

python从零进阶之路——day3,文件读写,函数

 

# author:zingerman
f  = open('testfile','r',encoding='utf-8')
print(f.name)
print(f.readline())
f.seek(0,0)
print(f.readline())
f.flush()               #将缓冲区中的数据立刻写入文件,同时清空缓冲区
f.close()               #关闭文件后,文件对象不可操作,默认退出程序关闭

python从零进阶之路——day3,文件读写,函数 

 tell方法:返回文件的当前位置,即文件指针当前位置

# author:zingerman
f  = open('testfile','r',encoding='utf-8')
print(f.name)
print(f.readline())
f.seek(0,2)
print(f.readline())
print(f.tell())

truncate() 方法:用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。

 

writelines() 方法用于向文件中写入一序列的字符串。

这一序列字符串可以是由迭代对象产生的,如一个字符串列表。

换行需要制定换行符 \n。

# author:zingerman
f  = open('testfile','w',encoding='utf-8')
print(f.name)
seq=['111\n','222']
f.writelines(seq)
f.close()               #关闭文件后,文件对象不可操作,默认退出程序关闭

 python函数:

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。

 

定义一个函数:

你可以定义一个由自己想要功能的函数,以下是简单的规则:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()
  • 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
  • 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
  • 函数内容以冒号起始,并且缩进。
  • return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None

参数调用:

位置参数,关键字参数,默认参数,不定长参数

 

# author:zingerman
def my_func (x,y,z,w=1):
    #位置参数,实参与形参一一对应
    #关键字参数,与参数顺序无关,且关键字参数只能放在位置参数后面
    #默认参数,调用函数的时候,默认参数非必须传递,一般把默认参数放在最后面,
    print(x)
    print(y)
    print(z)
    print(w)
my_func(1,2,3)
my_func(1,2,z=3)
#my_func(1,y=2,3)#报错:SyntaxError: positional argument follows keyword argument
my_func(1,2,z=3,w=4)#可为默认参数赋值,赋值时相当与关键字参数,需要在位置参数后面

 

# author:zingerman
def my_func1 (x,*args):
    #两种形式:*args  **args
    #*args接受N个位置参数,转换成元组形式
    print(x)
    print(args)
def my_func2  (x,**args):
    #接受N个关键字参数,转换成字典的方式
    print(x)
    print(args)
    print(args['name'])
def my_func3 (x,y=2,*args,**kwargs):
    print(x)
    print(y)
    print(args)
    print(kwargs)

my_func1(1,2,3,4)  #结果:1   (2,3,4)
my_func2(1,name='hulida',sex='nan')
my_func3(1,3,4,5,name='hulida',sex='nan')#1     3   (4, 5)  {'name': 'hulida', 'sex': 'nan'}

全局变量和局部变量:

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

可在函数内部通过global将局部变量变成全局变量,但一般不这样做

递归:一个函数调用自身

1.必须有一个结束条件,否则会无限循环

2.每次进入更深层次的递归,规模都比上一次规模小

3.递归效率不高,多次调用会导致栈溢出

# author:zingerman
def calnum (n):
    print(n)
    if int(n/2)>0:
        return calnum(n/2)
    print(n)
calnum(10)
#结果10  5.0  2.5     1.25    1.25

匿名函数

python 使用 lambda 来创建匿名函数。

  • lambda只是一个表达式,函数体比def简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
# author:zingerman
sum=lambda arg1,arg2:arg1+arg2
print(sum(1,2))