python基础(二)---函数与文件

函数

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))
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值