您的位置:首页 > 编程语言 > Python开发

Python函数篇(3)-内置函数、文件处理

2017-12-11 15:48 204 查看
1.内置函数

  

  上一篇文章中,我重点写了reduce、map、filter3个内置函数,在本篇章节中,会补充其他的一些常规内置函数,并重点写max,min函数,其他没有说明的函数,会在后面写到类和面向对象的文章中具体写出。

  

  abs()

  

  a=-2

  

  print(abs(a))         取绝对值,传入变量的数据类型必须是数字。否则程序报错

  

  运行结果:

  

  2

  

  all()

  

  a=[1,2,3]

  

  print(all(a))       遍历传入的每一个元素,返回一个布尔值,如果元素中存在0,None或空,则返回结果为False,否则返回Ture;如果传入的可迭代对象为空,仍然返回Ture

  

  运行结果:

  

  True

  

  any(www.078881.cn )

  

  a=[1,2,3,0]

  

  print(any(a))       遍历传入的每一个元素,返回一个布尔值,元素中只要有一个为真,就会返回Ture.

  

  运行结果:

  

  True

  

  bin();hex();oct()

  

  # print(bin(2))      十进制转二进制

  

  # print(hex(2))      十进制转十六进制

  

  # print(oct(2))      十进制转八进制

  

  bool()

  

  print(bool(www.ccyl178.com/ 0))      返回一个布尔值(0,None或空,返回False,否则,返回Ture)

  

  运行结果:

  

  False

  

  bytes(www.caitianxia178.com)

  

  print(bytes("你好",encoding="www.xyyulept.com utf-8").decode("utf-8"))  将字符串转化为字节,需要使用关键字encoding指定编码类型,如想返回,通过decode解码,默认解码类型为utf-8

  

  运行结果:

  

  你好

  

  chr();ord()

  

  print(chr(97))      将传入的值按ASCII码表输出

  

  print(ord("a"))     输入一个字符,显示出在ASCII表中对应的值是什么

  

  运行结果:

  

  a

  

  97

  

  dir();help()

  

  print(dir(chr))      目录,在chr函数后传入另一个函数,可以显示出传入函数内部都有哪些方法

  

  help(all)            与dir()不同,help中传入参数,可以查看该函数的具体使用方法,不过一般通过ctrl加鼠标左键,点击函数就可以查看。

  

  divmod()

  

  print(divmod(10,3))   取商得余数,这个方法可以用来做分页,后面会应用到

  

  运行结果:

  

  (3, 1)

  

  eval()

  

  复制代码

  

  name="[1,2,3,]"

  

  print(name)

  

  print(eval(name))            第一个功能:将字符串中的数据结构提取出来

  

  运行结果:(对比一下区别)

  

  [1,2,3,]

  

  [1, 2, 3]

  

  复制代码

  

  name="3*2*1"

  

  print(eval(name))            第二个功能:将字符串中数学运算运行一遍

  

  运行结果:

  

  6

  

  hash():可hash的就是不可变的数据类型,对于一个变量来说,只要改变量的值未发生变化,那么它对应的hash值也是不变的

  

  id():打印对象的内存地址

  

  isinstance()

  

  print(isinstance("czp",str))     判断数据类型

  

  运行结果:                         判断"czp"是否是字符串类型,返回值的类型为布尔值

  

  True

  

  global():打印都有哪些全局变量

  

  locals():打印都有哪些局部变量

  

  pow()

  

  print(pow(10,3))        #10**3,还可以传入3个参数,如pow(10,3,2) 意思就是10**3&2

  

  运行结果:

  

  1000

  

    reversed()

  

  name=[1,2,3,4]

  

  print(list(reversed((name))))           将列表中的元素 反转输出

  

  运行结果:

  

  [4, 3, 2, 1]

  

  round():四舍五入,传入两个参数

  

  sorted():排序,排序的过程其实就是比较大小,使用方法参考max()

  

  str():转变为字符串形式

  

  type():查看数据类型

  

  vars():将列表转化为字典,如果没有参数,就相当于locals的用法,打印的是局部变量的值,如果传入一个函数,会将该函数下的所有方法以字典的形式打印出来

  

  下面主要讲3个内置函数,zip();max();min()的用法

  

  1.zip()

  

  print(list(zip(("a","b","c"),(1,2,3))))    传入两个序列类型的参数(列表,元组等),输出一一对应的结果,传入的两个序列元素数量不相等,程序也并不会报错

  

  运行结果:

  

  [('a', 1), ('b', 2), ('c', 3)]

  

  2.max()

  

  max()函数中必须传入一个可迭代的对象,(可迭代对象可以理解为可以使用for循环的对象)取出每一个元素进行比较,在比较的时候,从元素的第一个位置从左往右对每一个元素进行比较,如果在某一位比出了大小,后面的元素就不需要再进行比较(不同数据类型之间不能进行max比较,程序会报错)

  

  先说一个最简单的使用方法:取出字符串中最大的元素

  

  num=[1,2,3,4]

  

  print(max(num))

  

  运行结果:

  

  4

  

  而如果数据类型是一个字典呢?我要取出name={"1_age":8,"2_age":19,"3_ag
a956
e":17}这个字典中,年龄最大的那个key,这时该怎么做?

  

  name={"1_age":8,"2_age":19,"3_age":17}

  

  print(max(name))

  

  运行结果:

  

  3_age

  

  显然 ,直接用max()函数计算出来的最大值是不对的,这是因为max()函数在判断字典数据类型的时候,默认是对Key进行比较,需求是比较年龄,然后输入该年龄对应的Key,此时可以用上面提到的zip方法

  

  name={"1_age":18,"2_age":19,"3_age":17}

  

  print(max(zip(name.values(),name.keys())))

  

  运行结果:

  

  (19, '2_age')

  

  对于列表中嵌套字典的,用这种方法:

  

  max()中可以传入两个值,(*args,key=None),默认key是None,我们也可以通过匿名函数,指定需要比较的字典values

  

  name=[{"name":"c","age":18},

  

  {"name":"z","age":3},]

  

  print(max(name,key=lambda dict:dict["age"]))

  

  运行结果:

  

  {'name': 'c', 'age': 18}

  

  3.min():取最小值,使用方法与max()相同,就不重复介绍了

  

  2.文件操作

  

  文件的处理流程简单来说就三步:1)打开一个文件(通过open()函数,文件打开方式主要是"r"(只读)、"w"(只写)、"a"(读写)三种模式,默认的打开方式只读模式

  

  2)通过文件句柄执行相关操作

  

  3)关闭文件

  

  通常读取一个文件的正常流程如下:假设现在有一个尼古拉斯赵四的文件

  

  f=open("尼古拉斯赵四",encoding="utf-8")       打开文件方式:open("文件名”,"打开方式(r\w\a)","编码方式"),默认是只读(r)模式

  

  print(f.read())                 通过open()打开文件后,使用文件名.read()的方式读取内容

  

  f.close()

  

  运行结果:

  

  输出的就是"尼古拉斯赵四" 这个文件中的内容      在读取文件内容后,使用close()方法 关闭文件释放内存

  

  r

  

  以上是正常的读取一个文件的流程,r(只读模式),顾名思义就是只有读的权限,不可以修改文件,如下是读取文件的其他方法

  

  f.readable()         判断是否是只读

  

  f.readline()         一次读一行,通过这种方式读取出来会有换行,因为文件每一句后会加回车,可以在最后加end=”“来取消换行

  

  f.readlines()        一次性读取全部文件内容,放在一个列表中

  

  w

  

  写模式,可以修改文件,但不可以读取源文件,如果文件存在,会直接清空掉文件中的所有内容,文件不存在,会新建一个新的文件(慎用)

  

  f=open("尼古拉斯赵四","w",encoding="utf-8")

  

  写文件的一些常规方法如下:

  

  f.write("写入的内容\n")       内容必须是字符串,如果写成f.write(3),程序会报错

  

  f.writable()                 判断是否只写

  

  f.writelines([写入的内容])    写入一个列表的内容,输出的内容是列表形式

  

  a

  

  追加模式,在此模式下,可通过f.write()方法  将内容写到最后

  

  r+

  

  可读可写,写的时候,就是从光标的位置开始写入,解释一下这个意思:所谓的从光标写入,在没有读取一个文件的时候,光标的位置就是在最前面,而如果我通过readline方法读取了一行内容后,光标位置实际上就是移动到了第一行的最后面,而此时我再执行write()操作,内容就会插入到第一行的后面。这个一定要理解。

  

  其他的方式还有像w+,a+等等,感兴趣的自己可以了解一下

  

  最后在本篇文章中再提最后一个点,如果每次都用close()关闭文件会不会觉得很麻烦?用以下方式完美的避免这一问题:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: