zoukankan      html  css  js  c++  java
  • Python函数篇(3)-内置函数、文件处理(已更新)

    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()

    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(0))      返回一个布尔值(0,None或空,返回False,否则,返回Ture)
    运行结果:
    False

      bytes()

    print(bytes("你好",encoding="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(),临时排序。sort():永久性排序,列表元素顺序无法恢复。

        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_age":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("文件名”,"打开方式(rwa)","编码方式"),默认是只读(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("写入的内容
    ")       内容必须是字符串,如果写成f.write(3),程序会报错
    f.writable()                 判断是否只写
    f.writelines([写入的内容])    写入一个列表的内容,输出的内容是列表形式

      a

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

      r+

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

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

      最后在本篇文章中再提最后一个点,如果每次都用close()关闭文件会不会觉得很麻烦?用以下方式完美的避免这一问题:

    with open("尼古拉斯赵四","r",encoding="utf-8") as f:        通过with open() as 文件名的方式,执行完操作后会自动关闭文件以释放内存
          print(f.read())
  • 相关阅读:
    May 1 2017 Week 18 Monday
    April 30 2017 Week 18 Sunday
    April 29 2017 Week 17 Saturday
    April 28 2017 Week 17 Friday
    April 27 2017 Week 17 Thursday
    April 26 2017 Week 17 Wednesday
    【2017-07-04】Qt信号与槽深入理解之一:信号与槽的连接方式
    April 25 2017 Week 17 Tuesday
    April 24 2017 Week 17 Monday
    为什么丑陋的UI界面却能创造良好的用户体验?
  • 原文地址:https://www.cnblogs.com/Chen-Zhipeng/p/8021870.html
Copyright © 2011-2022 走看看