函数
Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数
定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
- 一个函数可以返回多个值
- python中没有重载的概念,一旦有同名函数就会相互覆盖
#定义函数
def add(x,y):
#函数体
ret=x+y
return ret
#函数调用
ret=add(2,4)
print(ret)
#在定义函数时赋值默认参数
def mius(x,y=0):
return x-y
print(mius(4))
#一个函数可以返回多个值
def get_point():
x=10
y=20
return x,y
#解包 unpack
x,y=get_point()
print(x,y)
在python中函数也是对象,一个函数可以作为另一个函数的参数,一个函数也可以成为另一个函数的返回值
python中的变量的作用域是全局的,若要定义私有变量则变量名以双下划线开头即可.
内置函数
range() 函数
如果你确实需要遍历一个数字序列,内置函数 range() 会派上用场。它生成算术级数:
range()返回的对象表现的像是一个列表,实际却不是,可以理解为是期待的序列的连续索引值。
>>> for i in range(5):
... print(i)
...
0
1
2
3
4
>>>range(5, 10)
5, 6, 7, 8, 9
高阶函数
高阶函数就是指能够让函数的参数接受别的函数
#高阶函数:在参数中允许传入函数
def addPlus(x,y,f):
return f(x)+f(y)
print(addPlus(2,3,abs))
#函数返回函数
def sum(x):
m=0
def f():
for i in range(10):
m=i+x
return m
return f
r=sum(3)
#对函数的调用结果是一个函数
print(r)
#对r调用才能得到结果
print(r())
默认参数
python中可以指定默认参数,有多个默认参数时,调用的时候,既可以按顺序提供默认参数,也可以不按顺序提供部分默认参数。当不按顺序提供部分默认参数时,需要把参数名写上。
可变参数
在方法中的参数前加上星号*代表多个参数(参数组)
在方法中的参数前加上两个星号**代表一个字典,传参时用等号连接字典中的一个键与值
关键字参数
可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个元组。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个字典
对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查,就可以通过对不同的关键字做出不同的行为
def person(name, age, **kw):
if 'city' in kw:
# 有city参数
pass
if 'job' in kw:
# 有job参数
pass
print('name:', name, 'age:', age, 'other:', kw)
File
文件是存在在磁盘上的
Python中 open()
方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError,如果文件打开成功,接下来,调用read()
方法可以一次读取文件的全部内容,调用readlines()
是按行读取文件内容。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)open(file, mode=‘r’)。
file 对象常用的函数
1 file.close()
关闭文件。关闭后文件不能再进行读写操作。
2 file.flush()
刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
3 file.fileno()
返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
4 file.isatty()
如果文件连接到一个终端设备返回 True,否则返回 False。
5 file.next()
Python 3 中的 File 对象不支持 next() 方法。返回文件下一行。
6 file.read([size])
从文件读取指定的字节数,如果未给定或为负则读取所有。
7 file.readline([size])
读取整行,包括 “\n” 字符。
8 file.readlines([sizeint])
读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。
9 file.seek(offset[, whence])
移动文件读取指针到指定位置
10 file.tell()
返回文件当前位置。
11 file.truncate([size])
从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。
12 file.write(str)
将字符串写入文件,返回的是写入的字符长度。
13 file.writelines(sequence)
向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
由于文件读写时都有可能产生IOError,一旦出错,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,我们可以使用try ... finally
来实现,Python引入了with语句来自动帮我们调用close()方法
with open('/path/to/file', 'r') as f:
print(f.read())
文件路径操作
os.path模块中包含了一些实用的路径操作的函数
1.basename()
去掉目录路径,返回文件名
2.dirname()
去掉文件名,返回路径目录
3.split()
将文件的目录和文件名分拆,放入一个元组中
4.splitext()
将文件的文件名与扩展名分拆,放入一个元组中
5.exists()
判断路径是否存在
6.isdir()
判断一个对象是否是目录
7.isfile()
判断一个对象是否是文件
常用文件系统操作
os.pathconf(path, name)
返回相关文件的系统配置信息。
os.pipe()
创建一个管道. 返回一对文件描述符(r, w) 分别为读和写
os.popen(command[, mode[, bufsize]])
从一个 command 打开一个管道
os.read(fd, n)
从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
os.readlink(path)
返回软链接所指向的文件
os.remove(path)
删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
os.removedirs(path)
递归删除目录。
os.rename(src, dst)
重命名文件或目录,从 src 到 dst
os.renames(old, new)
递归地对目录进行更名,也可以对文件进行更名。
os.rmdir(path)
删除path指定的空目录,如果目录非空,则抛出一个OSError异常。
os.stat(path)
获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
os.utime(path, times)
返回指定的path文件的访问和修改的时间。
os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])
输出在文件夹中的文件名通过在树中游走,向上或者向下。
os.write(fd, str)
写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
os.path
模块获取文件的属性信息。
把目录下所有的文件路径都打印出来
import os.path as op
import os
#把目录下所有的文件路径都打印出来
my_path='d:/Tools'
for base_path,_,files in os.walk(my_path):
for f in files:
print(op.join(base_path,f))