原文章地址:https://www.ctolib.com/docs/sfile/interpy-zh/index.html
第一章 *args
和 **kwargs
*args和**kwargs仅仅是一个通俗的命名约定,我们也可以称他们为*he和**she,只有星号才是他们的本体。
运用*args和**kwargs我们可以将不定数量的参数传递给函数。*args形成元祖,**kwargs形成字典。
def test(num, *args, **kwargs):
print('这是个正常数量的参数:', num)
print('这是个不定数量的args参数:', args)
print('看下*args和args有什么区别', *args)
print('这是个不定数量的kwargs参数:', kwargs)
print('看下*kwargs和kwargs有什么区别', *kwargs)
test(1, 2, 'java', 'python', 'shell', 'php', name='Ton', sex=0, age=25)
# 输出(打印**kwargs会报错https://www.yangyanxing.com/article/kwargs_in_python.html):
# 这是个正常数量的参数: 1
# 这是个不定数量的参数: (2, 'java', 'python', 'shell', 'php')
# 看下*args和args有什么区别 2 java python shell php
# 这是个不定数量的kwargs参数: {'name': 'Ton', 'sex': 0, 'age': 25}
# 看下*kwargs和kwargs有什么区别 name sex age
第二章 调试(Debug)
此处的debug并非开发工具的调试功能(如pycharm中的debug),而是调用模块pdb。其中pdb.set_trace()可以实现在某些特定点查看变量信息和各种执行时信息
c
: 继续执行w
: 显示当前正在执行的代码行的上下文信息a
: 打印当前函数的参数列表s
: 执行当前代码行,并停在第一个能停的地方(相当于单步进入)n
: 继续执行到当前函数的下一行,或者当前行直接返回(单步跳过)
第三章 生成器
先来了解一下循坏、遍历、迭代、遍历的区别
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。[ 循环则技能对应集合,列表,数组等,也能对执行代码进行操作。] 迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。[迭代只能对应集合,列表,数组等。不能对执行代码进行迭代。] 遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。 [遍历同迭代一样,也不能对执行代码进行遍历。] 递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。[线性递归和尾递归。]
第四章 Map,Filter 和 Reduce
Map
Map
会将一个函数映射到一个输入列表的所有元素上
map(函数名, 数组, [数组], [数组]...),数组数量要和函数中的传递参数的数量所对应。
map还可以和匿名函数组合,如:list(map(lambda x: x*2, 数组))
匿名函数其实就是没有命名的函数,lambda后的x其实就是传递的参,x*2就是返回的值。
Filter
filter
过滤列表中的元素,并且返回一个由所有符合要求的元素所构成的列表,即改元素的返回值为True。
Reduce
当需要对一个列表进行一些计算并返回结果时,Reduce
是个非常有用的函数。举个例子,当你需要计算一个整数列表的乘积时。
from functools import reduce product = reduce( (lambda x, y: x * y), [1, 2, 3, 4] ) # Output: 24
第五章 set
(集合)数据结构
set与列表(list
)的行为类似,区别在于set
不能包含重复的值。
some_list = ['a', 'b', 'c', 'b', 'd', 'm', 'n', 'n'] duplicates = set([x for x in some_list if some_list.count(x) > 1]) print(duplicates) ### 输出: set(['b', 'n'])
取交集
valid = set(['yellow', 'red', 'blue', 'green', 'black']) input_set = set(['red', 'brown']) print(input_set.intersection(valid)) ### 输出: set(['red'])
取差集
valid = set(['yellow', 'red', 'blue', 'green', 'black']) input_set = set(['red', 'brown']) print(input_set.difference(valid)) ### 输出: set(['brown'])
第六章 三元运算符
略
第七章 装饰器
第八章 Global和Return
global可以定义一个全局变量
python中的return可以返回多个值
第九章 对象变动(Mutation)
每当你将一个变量赋值为另一个可变类型的变量时,对这个数据的任意改动会同时反映到这两个变量上去。新变量只不过是老变量的一个别名而已。这个情况只是针对可变数据类型。
第十章 __slots__
魔法
__slots__可以对class指定属性,如果使用指定外的其他属性就会报错。
子类不会继承父类的__slots__属性,每个子类需要重新定义__slots__属性。