查找dir
>>> dir(dict)
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']
>>>
一:递归
1:是调用了自身。2:设置了自身正确的返回值
递归的深度是100,如果要做爬虫类,需要加深,就要自己设置,
>>> import sys
>>> sys.setrecursionlimit(100)
def fan(n):
if n == 1:
return 1;
else:
return n * fan(n - 1)
number = int(input('请输入一个正整数:'))
result = fan(number)
print('%d 的阶乘是:%d' % (number, result))
但是比较消耗时间,和内存
函数的编写方式
def fanc(n):
result = n
for i in range(1, n):
result *= i
return result
number = int(input('请输入一个正整数:'))
result = fanc(number)
print('%d 的阶乘是:%d' % (number, result))
结果:
请输入一个正整数:3
3 的阶乘是:6
二:字典
1、用{}创建字典
代码:
1
2
|
x
=
{
"a"
:
"1"
,
"b"
:
"2"
}
print
x
|
输出:
{'a': '1', 'b': '2'}
2、用内置函数dict()
1)、入参为类似a="1"的键值对
代码:
1
2
|
x
=
dict
(a
=
"1"
, b
=
"2"
)
print
x
|
输出:
{'a': '1', 'b': '2'}
2)、入参为一个元组,元组内部是一系列包含两个值的元组,例如(("a", "1"), ("b", "2"))
代码:
1
2
|
x
=
dict
(((
"a"
,
"1"
), (
"b"
,
"2"
)))
print
x
|
输出
{'a': '1', 'b': '2'}
3)、入参为一个元组,元组内部是一系列包含两个值的列表,例如(["a", "1"], ["b", "2"])
代码:
1
2
|
x
=
dict
(([
"a"
,
"1"
], [
"b"
,
"2"
]))
print
x
|
输出:
{'a': '1', 'b': '2'}
4)、入参为一个列表,列表内部是一系列包含两个值的元组,例如[("a", "1"),("b", "2")]
代码:
1
2
|
x
=
dict
([(
"a"
,
"1"
),(
"b"
,
"2"
)])
print
x
|
输出:
{'a': '1', 'b': '2'}
5)、入参为一个列表,列表内部是一系列包含两个值的列表,例如[["a", "1"],["b", "2"]]
代码:
1
2
|
x
=
dict
([[
"a"
,
"1"
],[
"b"
,
"2"
]])
print
x
|
输出:
{'a': '1', 'b': '2'}
注意:
-
对于a="1"的方式初始化字典,字典的key只能为字符串,并且字符串不用加引号
-
对于dict内置函数初始化当入参是一个元组时,例如1)、2),元组内部的两元素元组或者列表至少为两个,否则会出错
3、用户fromkeys方法创建字典,第一个
代码:
1
2
|
dict
.fromkeys((
"a"
,
"b"
),
1
)
print
x
|
输出:
{'a': 1, 'b': 1}
入参可以的第一个参数是一个列表或者元组,里边的值为key,第二个参数是所有key的value值
原文链接https://www.cnblogs.com/shijingxiang/articles/4585878.html
在字典中查找的是键不是值,在序列中查找的是值
>>> di = dict.fromkeys(range(4),'哈哈')
>>> print(di.get(2))
哈哈
>>> di.get(1)
'哈哈'
>>> 23 in di
False
>>> 1 in di
True
>>>
5:清空clear
>>> di.clear()
>>>
一般不采用a = {}方式直接置为空,请看下面
>>> a = {'xing':'sdf'}
>>> b = a
>>> a = {}
>>> b
{'xing': 'sdf'}
可以看到b依旧可以访问。但是如果是用clear
>>> a = {'xing':'sdf'}
>>> b = a
>>> a.clear()
>>> b
{}
>>>
这样可以保证原数据被清空,个人可根据自己需要进行选择
6:copy:浅拷贝
>>> a = {1:'sdf', 2:'23'}
>>> b = a.copy()
>>> c = a
>>> id(a)
4383422216
>>> id(b)
4387235400 #浅拷贝地址是不一样的。
>>> id(c)
4383422216 #赋值的地址是一样的
>>>
7:pop、popItem 移除
>>> a = {1:'sdf', 2:'23'}
>>> a.pop(1)
'sdf'
>>> a
{2: '23'} #这里是随机弹,因为字典不跟数组一样有顺序
>>>
>>> a = {1:24, 2:42, 3:34, 4:34}
>>> a.popitem()
(1, 24)
>>> a
{2: 42, 3: 34, 4: 34}
>>>
8:setdefault 添加
>>> a.setdefault('234',23)
23
>>> a
{2: 42, 3: 34, 4: 34, 34: None, '234': 23}
>>>
9:update:利用一个字典或映射关系去更新另外一个字典
>>> a
{2: 42, 3: 34, 4: 34, 34: None, '234': 23}
>>> b = {4:'哈哈哈'}
>>> a.update(b)
>>> a
{2: 42, 3: 34, 4: '哈哈哈', 34: None, '234': 23}
>>>
三:集合
集合具有唯一性,具有剔除性
num2 = {2,2,4,3,5,6,3,5,5,6}
>>> num2
{2, 3, 4, 5, 6}
3.1:不支持索引
>>> num2[2]
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
num2[2]
TypeError: 'set' object does not support indexing
>>>
3.2:创建set
>>> set1 = set([23,3,4,3,3])
>>> set1
{3, 4, 23}
>>> set2 = set((2,3,2,3,5,3))
>>> set2
{2, 3, 5}
>>> #无序的列表 如果注重就要注意
3.3:用in 或者 not in 判断一个元素是否在集合中已经存在
>>> num2 = {2,2,3,4,5,6,7,8}
>>> 2 in num2
True
>>> 34 in num2
False
>>>
3.4:添加 add 删除remove
>>> num2.add(34232)
>>> num2
{2, 3, 4, 5, 6, 7, 8, 34232}
>>>
>>> num2.remove(3)
>>> num2
{2, 4, 5, 6, 7, 8, 34232}
>>>
3.5:不可变集合:frozen
>>> nume = frozenset([1,2,3,3,4])
>>> nume.add(2)
Traceback (most recent call last):
File "<pyshell#18>", line 1, in <module>
nume.add(2)
AttributeError: 'frozenset' object has no attribute 'add'
>>>