今天是在老男孩学习的第9天,大致内容整理如下:
昨日总结及补充:
读:
read() 一次性读
readline() 一行一行读,本身无结束
readlines() 一次性读完后生成列表
写:
write 需要换行则加上 \\n
光标:文件指针
seek 指定光标移动的位置
tell 获取光标位置
truncate 截取文件
关闭文件:
close
import os
os.remove(‘‘) 删除文件
os.rename(‘‘,‘‘) 重命名文件
函数基础
基本格式
def new_len(): s = ‘aaaaaa‘ h = 0 for i in s: h = h + 1 print(h) print(new_len())
我们定义一个函数,功能是为了检测字符串的个数。定义函数必须要在前方加上def,函数名称一定要一致,同时和变量的命名规范一样。
def new_len(): s = ‘aaaaaa‘ h = 0 for i in s: h = h + 1 return h print(new_len())
在函数中加入return即可定义返回值。同时return下面的函数部分的代码将直接忽略,不会执行
还要注意,我们上文定义的new-len是没有意义的,因为这个函数不能调用只能输出特定字符串的值,因此需要改进
i = input(‘>>>‘) def new_len(s): h = 0 for i in s: h = h + 1 return h print(new_len(i))
这样的就可以做到用户输入然后输出位数,那么在函数中s是函数的接收部分,他不知道s是什么,所以叫做 形参 。而i部分是用户输入的部分,它叫做实参。
函数的3种情况:
没有返回值:不写return或者return后不带变量
def new_len(): s = ‘aaaaaa‘ h = 0 for i in s: h = h + 1 print(new_len())
def new_len(): s = ‘aaaaaa‘ h = 0 for i in s: h = h + 1 return print(new_len())
def new_len(): s = ‘aaaaaa‘ h = 0 for i in s: h = h + 1 return None print(new_len())
三种结果都是一样的,返回None
返回一个值:
可以返回任何数据类型
只要返回了就可以接收到
如果在一个程序中有多个return则只执行第一个后就结束函数了
如果要接受多个实参则需要使用逗号隔开
v = input(‘>>>‘) k = input(‘>>>‘) sum = 0 def sum(v,k): sum = int(v) + int(k) return sum print(sum(v,k))
返回多个值:
多个返回值用多个变量接受,也可以用一个变量接受,那么得到的是一个元祖
def ret_demo2(): return 1,[‘a‘,‘b‘],3,4 ret = ret_demo2() print(ret)
参数:
没有参数 定义函数或者调用函数时括号内不写内容
有一个参数 传什么就是什么
有多个函数 位置参数,与新参一一对应,用逗号隔开
站在实参角度:
按照位置传参
按照关键字传参
def sum(v,k): sum = int(v) + int(k) return sum print(sum(v=2,k=1))
两种方式可以混用但是要注意顺序是先位置传然后关键字传。同时不能给同一个变量传多个值,报错
def sum(v,k): sum = int(v) + int(k) return sum print(sum(2,k=1))
站在形参角度:
位置参数 必须要传而且是有几个传几个
默认参数 可以不传,如果不传就是用默认参数,如果传了就用传的
def sum(v,k=1): sum = int(v) + int(k) return sum print(sum(2)) print(sum(v=2))
当定义函数时
位置参数:直接定义参数
默认参数(关键字参数):参数名 = ‘默认值’
顺序:位置参数 *args 默认参数 **args
动态参数:
当我们想要接收多个参数时需要用到动态参数
*args
def arg(*args): for i in args: print(i) return i k = [1,2,3,4,5,6,7,8,9] print(arg(k))
只能传输按照位置传参的值,成元祖
**kwargs
def stu_info(**kwargs): print(kwargs) print(kwargs[‘name‘],kwargs[‘sex‘]) stu_info(name = ‘alex‘,sex = ‘male‘)
两者可以混用,但是args必须在kwargs之前
总结:站在实参角度:给一个序列加 * 就是将这个序列按照顺序打散。站在形参角度:给这个变量加上 * 就是组合所有传来的值
函数的注释要注释在函数的开头说明函数的作用等