基础篇_010_函数_其他内置函数

  除了map()filter()reduce()之外还有许多内置函数,但是大多数都可以从函数名的字面上理解其功能。

  

----"a"开头的 ===》

  1. abs(value): 返回value的绝对值。

  2. all(iterable): 将可迭代序列中所有的值拿出来做布尔值运算,然后求逻辑与运算并返回。如果序列是空的也返回true。

print(all("123123"))    # 输出:True
print(all([1, 2, ""]))   # 输出:False
print(all([1, 2, 3]))    # 输出:True
print(all([]))           # 输出:True
print(all(""))           # 输出:True
print(all("1230"))      # 输出:True
print(all([1, 2, 0]))    # 输出:False
print(all("0"))          # 输出:True

这里有朋友就会问了: "这倒数后三个是怎么回事啊?"。这很容易解释,因为python在将他们中的元素遍历的时候并没有把他们当成数字处理,而是将他们看成了字符,然后转换成相应的utf-8的编码对应的十进制值,不为零则为True。大家不妨试试 ===》

for x in "1230":
    print(bool(x))  # 输出的值都是True
View Code

 

  3. ascii(value): 将value的ascii码返回。如果value是能由ascii码表示,则返回其本身;否则返回用"\x"、"\u"、"U"来表示 ===》 

  • \xhh 转义序列用于表示码点范围在U+007F ~ U+00FF 之间的 Unicode 字符。(hh代表数字)

  • \uxxxx 转义序列用于表示码点范围在U+0100 ~ U+FFFF 之间的 Unicode 字符。(xx..代表数字)

  • \Uxxxxxxxx 转义序列用于表示码点范围在 U+10000 及以上的字符。(xxx...代表数字)

作者:import_hello

链接:ascii() <Python 内置函数>

来源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  4. any(iterable): 只要可迭代序列中有一个元素的布尔值是真,那返回True。如果序列是空则返回False。

 

----"b"开头 ===》

  1. bool(value): 返回value的bool值。这里要注意一点: 在Python中,"\0", "\000"的布尔值并不是False,而是True,它们是占位符,只有""才是False。bool值为False的有: 0, "", None, [], (), {}。

  2. bytes(value, encoding = "xxx"): 以自定义的编码储存value并返回其字节形式。有以下几点需要注意: 

--(1). "xxx"不能Unicode!

--(2). 当选择encoding的时候,value的类型必须用str,因为只有str类型的数据才能被编码。

--(3). 当字符串可以被ascii码表示的时候直接返回本身;否则返回十六进制表示的字节。

--(4). 可以再后面加上.decode("xxx")来解码: print(bytes("是", encoding = "utf8").decode("utf8")),输出: 是。decode()中的默认值就是python3中的utf8编码。

 

----"c"开头 ===》

  1. chr(integer): 将ascii码值为integer的字符以字符的形式返回。eg: print(chr(97)) # 输出:a。

 

----"d"开头 ===》

  1. dir(object): 以字符串的方式储存对象中每一个方法和属性的名字,然后存在一个列表中,返回此列表。

  2. divmod(real_num, real_num): div求商,mod取余。以元组的形式返回(商, 余)。可以应用于搜索结果的分页处理。

 

----"g"开头 ===》

  1. globals(): 函数返回一个全局变量的字典,包括所有导入的变量。

 

----"h"开头 ===》

  1. hash(): 可hash的数据类型必须是不可变数据类型。hash有这样3个特点 ===>

--(1). 甭管你传入的参数的字符串或者数据有多长,hash之后的得到的数字长度是固定的(当然,如果传入的就是数字,结果就是本身)

--(2). 不可反推性。

print(hash("asdfadsfasdfs"))
# -1315381011667841813
# 6646911265014974642
# 7720888865356903687 .....
# 发现每次输出的结果都不同

--(3). 不变性。看起来这个性质和第2个性质相冲突,实际上,这里的不变性是指在同一个程序中执行的时候,只要传入的value值不变,那么他的hash值就不会变 ===》

print(hash("asdfadsfasdfs"))    # 输出:-6881123966098222011
print(hash("asdfadsfasdfs"))    # 输出:-6881123966098222011
print(hash("asdfadsfasdfs"))    # 输出:-6881123966098222011
print(hash("asdfadsfasdfs"))    # 输出:-6881123966098222011

那么这有什么用呢?他的作用可大了: 在网络传输的时候都是传的字符串,这时候如果没有外界的干扰,我们将文件打包整体hash的时候,它的hash值是不会变化的(下载的时候是在同一程序中进行的);但一旦有外界作出干扰,比如在文件中植入木马病毒,这时hash值将会变化,从而检测出来。我们现在来模拟一下这个过程 ===》

# 正常下载文件的时候,两者的hash值应该一样
document = "SimbaWang"
source_hash_value = hash(document)
download_hash_value = hash(document)
print("源文件和本地下载中的文件的hash值是否一样: ", source_hash_value == download_hash_value)
# 源文件和本地下载中的文件的hash值是否一样:  True
# 现在突然有外界干扰,如移植病毒,两者的hash值不同了 source_hash_value = hash(document) document = "Sim病毒baWang" download_hash_value = hash(document) print("源文件和本地下载中的文件的hash值是否一样: ", source_hash_value == download_hash_value)
# 输出:源文件和本地下载中的文件的hash值是否一样:  False

  2. help(object): 查看对象的帮助,比如输入str,返回的就是一个str对象的所有属性和方法及其解释。

 

----"l"开头 ===》

  1. locals(): 与globals()相对,以字典的形式返回本地级别的变量。

 

----"o"开头 ===》

  1. ord(str): 与chr()相反,传入一个字符后返回它的ascii码。

 

----"p"开头 ===》

  1. pow(x, y, z): 返回x**y(如果只传了两个参数);返回 x**y%z(如果传了第三个参数z)。

 

----"r"开头 ===》

  1. reversed(iterable): 取反序列,返回一个reverseiterable对象,但是不改变传入的序列。

 

----"s"开头 ===》

  1. slice(start, end, step): 将可迭代对象切片。

my_string = "hello"
slice1 = slice(1, 4, 2) # 这就相当于[]中的三个参数
print(my_string[slice1])    # 输出:el
print(slice1.start)     # 输出第一个参数:1
print(slice1.stop)      # 输出第二个参数:4
print(slice1.step)      # 输出第三个参数:2
View Code

  2. sorted(sequence, key = ): 将一个可迭代的序列按照给定的方法(匿名方法)从小到大排序。"基础篇_010_函数_sorted()函数"

 

----"t"开头 ===》

  1. type(): 查看传入参数的类型。

 

----__improt__(str) ===》

我们知道导入模块用的是import file_name,比如这样 ===》

# 在文件selfing_define.py中写入 ===》
#!/usr/bin/env python
# -*- coding: utf8 -*-
def hello_world():
    print("hello world!")


# 在test.py中写入 ===》
import selfing_define
selfing_define.hello_world()
# 输出:hello world
View Code

但是大多数时候我们遇到的并不是直接导入文件,而是得到了一个文件名的字符串形式,eg: model_name = "selfing_define",这是就不能直接用import关键字了,但是天无绝人之路,贴心的Python在已经为我们想到了这些东西,给我们提供了__import__()函数,让我们能将字符串形式的文件名改成模块 ===》

model_name_str = "selfing_define"
selfing_define = __import__(model_name_str)
selfing_define.hello_world()    # hello world!
View Code

这里稍作补充: import关键字导入模块的时候,回去调用OS,然后OS找到__import__()这个方法,传入文件名,这是因为我们所写的一切代码在OS底层都是字符串的形式。

 

posted @ 2020-03-03 10:56  BNTU  阅读(83)  评论(0)    收藏  举报