本文纲要。
作为一门高级编程语言, 它为我们提供了许多方便易用的内置函数, 这就节省了不少开发应用的时间。在目前的 3.7 版本中, 一共有 69 个内置函数, 其中有一些是我们耳熟能详的函数, 另外还有一些却不是很常见, 在这里我们主要介绍一下一些新手必备的函数以及它们具体的用法。

这里头呢, 咱们为了好说清楚, 就把这些已经放在里面的函数, 按照一个大致的情况, 把它们分成六个不同的种类出来, 以便让大家都能明白。
使用print()来输出, 使用open()进行打开操作, 以及使用input()来获取输入。
在进行迭代相关操作的时候, 去使用那个叫做zip()的函数。
序列属性sum() max() min() len()
执行那个被称为操作序列的动作, 然后调用一下range这个函数。
通过对象属性 dir 来获取相关信息, 同时使用 id 来查看标识, 接着调用 type来确认类型。
把那个评估执行的操作, 还有这个地图函数的处理, 以及切片操作的内容, 统统都列出来。
输入输出
我们使用print这个函数, 来把那个对象给输出到控制台里。
print(*objects, sep=' ', end='\n', file=
sys.stdout, flush=False)
这个符号是用来表示可变参数的, 它的意思是能够接受任意多的对象。参数sep的作用是表示输出对象之。
在默认的情况下, 用来作为分隔符的是空格。
>>> print('Python', 'Python')
Python Python
分隔符为'*':
>>> print('Python', 'Python', sep = '*')
Python*Python
现在的人们在格式化输出字符串的时候, 通常会用到三种方法。
name = 'Python'
fmt1 = f'Python:{name}'
fmt2 = 'Python:{}'.format(name)
fmt3 = 'Python:%s' %name
print(fmt1)
print(fmt2)
print(fmt3)
这个函数是用来打开文件的, 并且它会返回一个文件对象。
open(file, mode='r', buffering=-1,encoding=None, errors=None, newline=None, closefd=True, opener=None)
file这个变量是文件的地址, mode是打开文件的时候使用的模式, 默认为'r',这个模式表示读取文件。除了'r'以外, 常用的还有: 'w'可以表示写入文件、'b'则表示以二进制形式打开。
常用的方式是通过使用上下文管理器 with 来打开文件, 然后调用 f.read() 这个方法去读取全部内容, 又或者选择用 f.() 这种方法来单独读取一行内容。
with open('test.txt', 'r')PythonPythonPythonPythonPythonPythonPythonPython as f:
text1 = f.read()
with open('test.txt', 'r') as f:
text2 = ''
line = f.readline()
while line:
text2 += line
line = f.readline()
assert text1 == text2
print(text1)
有时候, 我们在进行文件的读取操作之候, 还会遭遇乱码这样的情况发生, 在这个时候, 可以明确地去指定编码格式:
当文件中有中文的时候,使用 'utf-8' 编码会导致异常:: 'utf-8' codec can't byte 0xb8 in 7: start byte
with open('test.txt', 'r',
encoding='utf-8') as f:
text1 = f.read()
这个时候, 大伙儿可以把 '' 或者 'gbk' 编码拿来试试, 好去打开那个含有中文字符的文件, 结果呢, 文件便能成功地被打开了。
with open('test.txt', 'r',
encoding='gb2312') as f:
text1 = f.read()
with open('test.txt', 'w',
encoding='gbk') as f:
f.write('Python')
input 函数获取控制台输入
input([prompt])
input 这个函数, 大家得记住哈, 它的那个参数是字符串, 所以, 你往里面传一个字符串进去, 它就弹出窗口提示那个用户去输入。
>>> s = input('Python:')
Python:Python
>>> s
'Python'
迭代相关
当函数完成执行后, 它会将那些元素的序号以及和这些序号相对应的值一并返回出来给大家。
enumerate(iterable, start=0)
这个参数它代表的就是一个可以迭代去遍历的对象, 那个叫做 start 的参数呢, 它就是用来表示那个元素序号从哪里开始算起的, 在默认的情况下, 它这个起点是等于 0 的。
这个函数的其他形式的表达, 其实就是下面的这些内容。
def enumerate(sequence, start=0):
n = start
for elem in sequence:
yield n, elem
n += 1
seq = ['P', 'y', 't', 'h', 'o', 'n']for i, elem in enumerate(seq):
print(i, elem)
zip 函数用于同时迭代多个对象
zip(*iterables)
* 可以接受任意多个可迭代对象
a = ["**", '**', '**']
b = ['Python', 'Python', 'Python']
c = a
print('#'*20)
for i, j, k in zip(a, b, c):
print(i, j, k)
print('#'*20)
序列属性
序列的最大值, 它是max。
这个序列的最小值是用符号min来表示的。
序列的总和, 这个数值是用字母 sum 来表示的。
这个序列的长度呢, 就是那个被表示为len的东西。
基本用法是, 把序列分别传给这四个函数, 然后就能够得到这些序列对应的属性。
import random
random.seed(21)
seq = [random.randint(0, 100) for i in range(10)]
print(seq)
# [21, 53, 88, 53, 81, 36, 61, 27, 60, 65]
print(max(seq))
# 88
print(min(seq))
# 21
print(sum(seq))
# 545
print(len(seq))
# 10
作为一个内置的函数, 它可以直接接受生成器作为参数来进行传入操作, 这个时候是不需要用到括号的。
import random
random.seed(21)
num = max(random.randint(0, 100) for i in range(10))
print(num)
# 88
可以通过传入 key 这个参数, 把它作为比较大小的一个依据, 这其实就相当于把序列当中每一个叫做 item 的元素先放到函数 key 里面去处理, 然后再把函数返回回来的那个数值拿出来用, 当作判断对象大小到底怎么样的一个依据。
def foo(x):
return 1. / x
max(seq, key = foo)
# 21
对于咱们自己定义的那种类型来说的话, 是必须要去完成那些特殊方法的实现的这个动作的, 否则就不行, 就没法去顺利进行像使用len这种操作的步骤了。
这里的len那个符号, 它代表的是进行长度计算这样的动作, 然后等于号那个东西, 它用来代表相等判定这个操作, 至于小于号, 它就代表着大小排序中小于这种关系操作。
class foo:
def __init__(self, num, seq):
self.num = num
self.seq = seq
def __len__(self):
return len(self.seq)
def __eq__(self, other):
return self.num == other.num
def __lt__(self, other):
return self.num < other.num
>>> f1 = foo(18, [1, 4, 6])
>>> f2 = foo(21, [1, 7, 9, 10])
>>> f1 < f2
True
>>> f1 > f2
False
>>> f1 == f2
False
>>> f3 = foo(18, [9, 9, 0, 7])
>>> f1 == f3
True
>>> len(f1)
3
>>> len(f2)
4
操作序列
range这个函数, 它的工作是什么呢, 说白了就是去生成一个序列。
range(start, stop[, step])
>>> range(6)
range(0, 6)
>>> list(range(6))
[0, 1, 2, 3, 4, 5]
>>> list(range(0, 6, 2))
[0, 2, 4]
由 range 函数生成出来的那个对象, 它是可以直接拿去进行迭代操作的, 这一点和列表是非常相似的, 这里的下划线符号是用来表示一个被废弃掉的变量的, 这么做的主要目的是为了去避免这个变量环境受到污染的困扰。
for _ in range(3):
print('Python')
函数啊, 它呢是可以把这个序列给逆着放一下然后变一个顺序的。
我们可以对序列执行逆置操作, 这个序列可以是元组、字符串或者列表。如果要对列表和字符串进行逆置的话, 使用 list 这种功能或者是 slice 这样的方法会显得更加方便一些。
import random
random.seed(21)
seq = [random.randint(0, 100) for i in range(10)]
print(seq)
# [21, 53, 88, 53, 81, 36, 61, 27, 60, 65]
reversed(seq)
print(list(reversed(seq)))
# [65, 60, 27, 61, 36, 81, 53, 88, 53, 21]
把字符串的顺序完全颠倒过来。
>>> a = 'Python'
>>> a[::-1]
'Python'
>>> ''.join(reversed('Python'))
'Python'
那个函数, 是能够对序列来进行排序的操作的。
sorted(iterable, *, key=None, reverse=False)
这个操作和 list.sort 操作是不一样的,因为 list.sort 会原地进行排序, 而它则会返回一个新的有序序列, 同时原序列还会保持不变的。
*在这里表示的是仅限关键字参数, 也就是所谓的-only, 这意味着 key、参数的传入只能采用关键字传参的方式, 绝对不能通过位置传参的方式进行。那个参数的存在是为了表示逆置操作, 而 key和之前 len函数中的 key参数是类似的关系, 它的主要作用是作为函数排序时候的依据。
>>> sorted([9, 6, 2, 3, 6])
[2, 3, 6, 6, 9]
对象属性
dir 这一个函数呢, 它是负责把属性列表给返回出来的。
id 函数返回对象地址
在进行判断时, 需要对对象的类型予以确认。
type这个函数, 它的作用, 就是用来去返回那个对象的类型。
class foo: pass>>> dir(foo)['__class__','__delattr__','__dict__','__dir__',......'__str__','__subclasshook__','__weakref__']# 创建实例>>> f = foo()>>> type(foo)__main__.foo>>> isinstance(f, foo)True>>> id(f)2135099584864
映射类型
eval 解除引号的束缚
把那个叫做 map 的函数拿过来, 对着单个对象进行应用操作。
slice生成切片。
eval这个功能能够让字符串里面那些单引号给去掉, 接着就能把引号里头包含着的什么东西给拿到手。后面那个演示过程是把怎么运用eval这个东西, 去从字符串里面提取出字典来的事儿给讲清楚的。
>>> info = '{"name": "LiHua", "age": 12}'
>>> eval(info)
{'name': 'LiHua', 'age': 12}
>>> info_dict = eval(info)
>>> type(info_dict)
dict
map 这个动作, 指的是把传进来的那个函数, 针对序列里的每一个元素, 去进行处理和运用, 并且最后会把迭代器给返回出去。
map(function, iterable, ...)
举一个例子来说, map函数实际上就是对seq列表里面的每一个元素item去实施int这个操作, 也就是进行int(item)这一步。匿名函数的道理也是一样的, 它就是对序列里面的每一个元素去执行加2的这个操作。
>>> seq = [1.5, 4.5, 9.1]
>>> list(map(int, seq))
[1, 4, 9]
>>> list(map(lambda x: x + 2, seq))
[3.5, 6.5, 11.1]
slice 这个函数是用来为切片操作命名的, 这样子的话, 切片操作就会显得更加的清晰和明白了。
slice(start, stop[, step])
start 这个参数是指代起点的位置, stop 这个参数是指代终点的位置, step 这个参数是指代步长的大小。在使用了该操作这一手段之后, 就可以让截取有规律的文本内容的这一过程变得非常轻松。特别是对于长文本这种情况, 使用 slice 函数会更加清晰并且容易让人理解。
>>> text = ' Python'
>>> name = slice(0, 6)
>>> text[name]
Python
>>> content = slice(6, 16)
>>> text[content]
Python
这篇文章到这里就是彻底结束了, 所以大家可以趁着这个热度还没有散掉的时机, 多多地进行相关的练习。