python学习第二课

# f = open('a.txt','r',encoding='utf-8')#如果不加 encoding='utf-8'的话,那么读取的文件默认用操作系统的字符编码来读取 容易造成乱码
# data = f.read()
# print(data)
# f.close()#.close() 如果用open()方式打开的话 必须用close关闭文件
#
# with open('a.txt','r',encoding='utf-8'):
# print(f.read())
# l=['111\n','222\n','333\n']
# with open('a.txt','w') as f:
# f.writelines(l)

# with open('a.txt') as f:
# for line in f:
# print(line,end='') #print函数默认有换行符 end='\n' 所以指定end='' 替换掉换行符 打印出的东西就不会多余一条换行了
#
# 所有的数据类型都自带布尔值
# 布尔值为False的情况:0,空,None




# 练习题:练习拷贝(cp)命令 实现文件拷贝操作
# with open('a.txt','rb') as f: # 用b模式 先打开源文件a.txt,以bytes类型读取
# #print(type(f.read())
# with open('b.txt','wb') as j: # 用b模式 把a.txt读取出来的bytes类型内容 写进b.txt中
# j.write(f.read()) # 实际上读取内容的时候 open命令做了一个dacode命令操作
# # 写入的时候 open命令做了一个encode命令操作

# 修改文件
# 方式1:一行一行的读取,一行一行的修改 之后保存到硬盘,删除原来的文件,重命名为原来的文件名
import os
# with open('a.txt','r') as read_f,open('c.txt.swap','w') as write_f:
# for line in read_f:
# line = line.replace('老男孩','SB')
# write_f.write(line)
# os.remove('a.txt')
# os.rename('c.txt.swap','a.txt')

# 方式2:读取源文件到内存,全部修改后保存,删除原来的文件,重命名新文件为源文件名
# with open('a.txt','r') as read_f,open('c.txt.swap','w') as write_f:
# line = read_f.read()
# line.replace('SB','老男孩')
# write_f.write(line)
# os.remove('a.txt')
# os.rename('c.txt.swap','a.txt')

# 函数

# 函数的返回值return
# 注意第一点:
# 在调用函数过程中,一旦执行到return,就会立即终止该函数,并且把return后的结果当做本次调用的返回值返回。
# 函数体内可以有多个return,但只会执行一次。
# def foo():
# print('1111')
# return 1
# print('2222')
# return 2
# print('3333')
# return 3
# res = foo()
# print('函数调用完毕',res)
# 注意的第二点:
# 返回的值可以是任意类型
#
# 注意的第三点:
# 没有return:默认返回None
# 可以返回一个值======>类型就是值本身的类型
# 可以用逗号分开,返回多个值,类型为=====>tuple 元组类型

# 函数调用:
# 需要注意,先通过函数名找到函数的内存地址,之后通过括号调用

# def foo1(): #pass 表示什么都不做
# pass
# def foo2():
# pass

# 函数的参数:
# 一、位置参数:
# 位置形参:必须被传值的参数,多一个不行,少一个也不行
# 位置实参:从左到右一次赋值给形参
# def foo(x,y):
# print(x,y)
# foo(1,2)
#
# 二、关键字参数:在函数的调用阶段,按照key=values的形式定义实参,可以不依赖位置而指名道姓的给形式参数传值
# 需要注意的问题:(可以与位置实参混用,但是)
# 1.位置实参必须在关键字实参的前面
# 2.不能为一个形参重传值
# def foo(x,y):
# print(x,y)
# foo(1,2,y=20) #错误的

# 三、默认参数:在定义函数阶段,已经为形参赋值了,在定义阶段赋值,意味着调用阶段可以不传值
# 注意的问题:
# 1.默认参数的值,只在定义阶段赋值一次
# 2.位置形参应该在默认参数前面(默认参数应该处于函数的参数最后位置)
# 3.默认参数的值应该是不可变类型


# 函数是第一类对象:函数可以当做数据来使用
# def foo():
# print('from foo...')
# 1.可以被引用
# f=foo
# print(f)
# f()
# 2.可以当做一个参数传入函数中
# def wrapper(f):
# print(f)
# f()
# wrapper(foo)
# 3.可以当做函数的返回值
# def wrapper():
# return foo
# f=wrapper()
# print(f is foo)
# 4.可以当做容器类型的一个元素
# l=[foo,1,2]
# l[0]()






posted @ 2017-09-23 00:31  彭思龙  阅读(156)  评论(0)    收藏  举报