内容

变量的创建过程

身份运算和None

数据类型

一、 变量创建过程

首先,当我们定义了一个变量name = ‘oldboy’的时候,在内存中其实是做了这样一件事:

程序开辟了一块内存空间,将‘oldboy’存储进去,再让变量名name指向‘oldboy’所在的内存地址。如下图所示:

我们可以通过id()方法查看这个变量在内存中的地址

1 >>> name = "oldboy"

2 >>>id(name)

3 4317182304

变量的修改

一般我们认为修改一个变量就是用新值把旧值覆盖掉, 可python是这样实现的么?

1 >>> name = "oldboy"

2 >>>id(name)

3 4317182304

4 >>>

5 >>> name = "alex"

6 >>> id(name) # 如果只是在原有地址上修改,那么修改后内存地址不应该变化呀。

7 4317182360

实际的原理什么样的呢? 程序先申请了一块内存空间来存储‘oldboy’,让name变量名指向这块内存空间

执行到name=‘alex’之后又申请了另一块内存空间来存储‘alex’,并让原本指向‘oldboy’内存的链接断开,让name再指向‘alex’。

变量的指向关系

提问:下面这段代码为何出现这样的现象?

1 >>> name1 = 'oldboy'

2 >>> name2 = name1 # 把name1赋值给name2,这样name2的值也是oldboy了

3 >>> print(name1,name2)

4 oldboy oldboy

5 >>>

6 >>> name1 = 'alex'

7 >>> print(name1,name2) #改了name1后,name2为何没跟着改?

8 alex oldboy

要想知道上面问题的结果是为什么,首先要了解在内存中两个变量的存储情况

从上面的示意图中我们可以知道,当执行name2=name1这句话的时候,事实上是让name2指向了‘oldboy’所在的内存地址。

修改name1的值,相当于断开了name1到‘oldboy’的链接,重新建立name1和‘alex’之间的链接。在这个过程中,始终没有影响到name2和‘oldboy‘之间的关系,因此name2还是‘oldboy’,而name1变成了‘alex’。

二、身份运算和None

python 中有很多种数据类型, 查看一个数据的类型的方法是type().

>>> name="克里斯"

>>> age = 29

>>>

>>>name

'克里斯'

>>>

>>>type(name),type(age)

(, )

判断一个数据类型是不是str, or int等,可以用身份运算符is

>>> type(name) isstr

True

>>>

>>> type(name) is notint

True

空值None

代表什么都没有的意思,一般用在哪呢? 比如玩游戏,你要初始化一个女朋友, 需要填上姓名、年龄、身高、体重等信息, 这些信息是让玩家填的,在填之前,你要先把变量定义好,那就得存个值 ,这个值用0,1来占位不合适 ,用True,False也不合适 ,用None最合适

>>> name=None

>>> age=None

>>> height=None

>>> weight=None

>>>

>>>name,age,height,weight

(None, None, None, None)

>>>

此时可用is 运算符来判断变量是不是None

1 >>> if name isNone:

2 ... print("你的女朋友还没起名字呢.")

3 ...

4 你的女朋友还没起名字呢.

其实用==判断也行,但是不符合开发规范

>>> name ==None

True

三元运算

显的很NB的代码写法。

1 name = "Eva"

2 sex =None

3 # 普通写法

4 if name == "Eva":

5 sex = "Female"

6 else:

7 sex = "Male"

8 # 用三元运算来写

9 sex = "Female" if name == "Eva" else "Male"

三、数据类型

列表

定义:[]内以逗号分隔,按照索引,存放各种数据类型,每个位置代表一个元素

再回顾下列表的特点:

1.可存放多个值

2.按照从左到右的顺序定义列表元素,下标从0开始顺序访问,有序

3.可修改指定索引位置对应的值,可变

列表增加操作

追加,数据会追加到尾部

1 >>>names2 ['alex', 'jack']3 >>> names.append("rain")4 >>> names.append("eva")5 >>>

6 >>>names7 ['alex', 'jack', 'rain', 'eva']

插入,可插入任何位置

1 >>> names.insert(2,"黑姑娘")2 >>>names3 ['alex', 'jack', '黑姑娘', 'rain', 'eva']4 >>>

合并,可以把另一外列表的值合并进来

1 >>> n2 = ["狗蛋","绿毛","鸡头"]2 >>>names3 ['alex', 'jack', '黑姑娘', 'rain', 'eva']4 >>>names.extend(n2)5 >>>names6 ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']

列表嵌套

>>> names.insert(2,[1,2,3])>>>names

['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']>>> names[2][1]2

删除操作

del 直接删

1 >>>names2 ['alex', 'jack', [1, 2, 3], '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']3 >>> del names[2]4 >>>names5 ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']

pop 删

1 >>>names2 ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛', '鸡头']3 >>> names.pop() #默认删除最后一个元素并返回被删除的值

4 '鸡头'

5 >>>names6 ['alex', 'jack', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛']7 >>>help(names.pop)8 >>> names.pop(1) #删除指定元素

9 'jack'

clear 清空

1 >>>n22 ['狗蛋', '绿毛', '鸡头']3 >>>n2.clear()4 >>>n25 []

修改操作

>>>names

['alex', '黑姑娘', 'rain', 'eva', '狗蛋', '绿毛']>>> names[0] = "金角大王"

>>> names[-1] = "银角大王"

>>>names

['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王']

查操作

1 >>>names2 ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']3 >>>

4 >>> names.index("eva") #返回从左开始匹配到的第一个eva的索引

5 3

6 >>> names.count("eva") #返回eva的个数

7 2

切片

切片就像切面包,可以同时取出元素的多个值

1 names[start:end]2 >>>names3 ['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']4 >>> names[1:4] #不包含下标4的元素

5 ['黑姑娘', 'rain', 'eva']

*切片的特性是顾头不顾尾,即start的元素会被包含,end-1是实际取出来的值

倒着切

1 >>> names[-5:-1]2 ['rain', 'eva', '狗蛋', '银角大王']

但其实我想要的是后5个,只打印了4个,’eva’这个值没出来,为什么,因为上面提到的顾头不顾尾

可是想把后5个全取出来如何做呢?

1 >>> names[-5:]2 ['rain', 'eva', '狗蛋', '银角大王', 'eva']

如果取前几个值 ,一样可以把:号左边的省掉

>>>names

['金角大王', '黑姑娘', 'rain', 'eva', '狗蛋', '银角大王', 'eva']>>> names[0:3]

['金角大王', '黑姑娘', 'rain']>>> names[:3] #跟上面一样的效果

['金角大王', '黑姑娘', 'rain']

步长, 允许跳着取值

1 names[start:end:step] #step 默认是1

2 >>>a3 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]4 >>> a[0:7:2] #设置步长为2

5 [0, 2, 4, 6]6 >>>a7 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]8 >>>

9 >>> a[::3] #按步长3打印列表,第1个:是省略掉的start:end

10 [0, 3, 6, 9]

列表反转

1 >>> a[::-1] #通过把步长设置成负值,可达到列表返转的效果

2 [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]3 >>> a[::-2]4 [9, 7, 5, 3, 1]

排序&反转

排序

1 >>> a = [83,4,2,4,6,19,33,21]2 >>>a.sort()3 >>>a4 [2, 4, 4, 6, 19, 21, 33, 83]

下面的排序结果为何如何解释?

1 >>> names=['金角大王', 'rain', '@', '黑姑娘', '狗蛋', "4","#",'银角大王', 'eva']2 >>>names.sort()3 >>>names4 ['#', '4', '@', 'eva', 'rain', '狗蛋', '金角大王', '银角大王', '黑姑娘']

答案全在这张表上,虽然后面我们会讲,但现在先知道,排序的优化级规则是按这张表来的

反转

1 >>>names2 ['#', '4', '@', 'eva', 'rain', '狗蛋', '金角大王', '银角大王', '黑姑娘']3 >>>names.reverse()4 >>>names5 ['黑姑娘', '银角大王', '金角大王', '狗蛋', 'rain', 'eva', '@', '4', '#']

循环列表

>>> for i innames:

...print(i)

...

黑姑娘

银角大王

金角大王

狗蛋

rain

eva

@4

#

编程练习-购物车程序开发

根据以下数据结构:

1 goods =[2 {"name": "电脑", "price": 1999},3 {"name": "鼠标", "price": 10},4 {"name": "游艇", "price": 20},5 {"name": "美女", "price": 998},6 ......7 ]

实现功能要求:

1、启动程序后,让用户输入工资,然后进入循环,打印商品列表和编号

2、允许用户根据商品编号选择商品

3、用户选择商品后,检测余额是否够,够就直接扣款,并加入购物车, 不够就提醒余额不足

4、可随时退出,退出时,打印已购买商品和余额

元组

有些时候我们的列表数据不想被人修改时怎么办? 就可以用元组存放,元组又被称为只读列表,不能修改。

定义:与列表类似,只不过[]改成()

特性:

1.可存放多个值

2.不可变

3.按照从左到右的顺序定义元组元素,下标从0开始顺序访问,有序

创建

1 ages = (11, 22, 33, 44, 55)2 #或

3 ages = tuple((11, 22, 33, 44, 55))

常用操作

1 #索引

2 >>> ages = (11, 22, 33, 44, 55)3 >>>ages[0]4 11

5 >>> ages[3]6 44

7 >>> ages[-1]8 55

9 #切片:同list

10 #循环

11 >>> for age inages:12 print(age)13 11

14 22

15 33

16 44

17 55

18 #长度

19 >>>len(ages)20 5

21 #包含

22 >>> 11 inages23 True24 >>> 66 inages25 False26 >>> 11 not inages27 False

注意:元组本身不可变,如果元组中还包含其他可变元素,这些可变元素可以改变

1 >>>data2 (99, 88, 77, ['Alex', 'Jack'], 33)3 >>> data[3][0] = '金角大王'

4 >>>data5 (99, 88, 77, ['金角大王', 'Jack'], 33)

为啥呢? 因为元组只是存每个元素的内存地址,上面[‘金角大王’, ‘Jack’]这个列表本身的内存地址存在元组里确实不可变,但是这个列表包含的元素的内存地址是存在另外一块空间里的,是可变的。

字符串

定义

字符串是一个有序的字符的集合,用于存储和表示基本的文本信息,’ ‘或’’ ‘’或’’’ ‘’’中间包含的内容称之为字符串

创建:

s ='Hello,Eva!How are you?'

特性:

按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序

可以进行切片操作

不可变,字符串是不可变的,不能像列表一样修改其中某个元素,所有对字符串的修改操作其实都是相当于生成了一份新数据。

补充:

1.字符串的单引号和双引号都无法取消特殊字符的含义,如果想让引号内所有字符均取消特殊意义,在引号前面加r,如name=r’l\thf’

字符串的常用操作

字符串操作方法有非常多,但有些不常用 ,我们只讲重要的一些给大家,其它100年都用不上的有兴趣可以自己研究

1 defcapitalize(self):2 首字母大写3 defcasefold(self):4 把字符串全变小写5 >> > c = 'Alex Li'

6 >> >c.casefold()7 'alex li'

8 def center(self, width, fillchar=None):9 >> > c.center(50, "-")10 '---------------------Alex Li----------------------'

11 def count(self, sub, start=None, end=None):12 """

13 S.count(sub[, start[, end]]) -> int14 >>> s = "welcome to apeland"15 >>> s.count('e')16 317 >>> s.count('e',3)18 219 >>> s.count('e',3,-1)20 221 def encode(self, encoding='utf-8', errors='strict'):22 """

23 编码,日后讲24 def endswith(self, suffix, start=None, end=None):25 >> > s = "welcome to apeland"

26 >> > s.endswith("land") 判断以什么结尾27 True28 def find(self, sub, start=None, end=None):29 """

30 S.find(sub[, start[, end]]) -> int31 Return the lowest index in S where substring sub is found,32 such that sub is contained within S[start:end]. Optional33 arguments start and end are interpreted as in slice notation.34 Return -1 on failure.35 """

36 return037 def format(self, *args, **kwargs): #known special case of str.format

38 >> > s = "Welcome {0} to Apeland,you are No.{1} user."

39 >> > s.format("Eva", 9999)40 'Welcome Eva to Apeland,you are No.9999 user.'

41 >> > s1 = "Welcome {name} to Apeland,you are No.{user_num} user."

42 >> > s1.format(name="Alex", user_num=999)43 'Welcome Alex to Apeland,you are No.999 user.'

44 defformat_map(self, mapping):45 """

46 S.format_map(mapping) -> str47 Return a formatted version of S, using substitutions from mapping.48 The substitutions are identified by braces ('{' and '}').49 """

50 讲完dict再讲这个51 def index(self, sub, start=None, end=None):52 """

53 S.index(sub[, start[, end]]) -> int54 Return the lowest index in S where substring sub is found,55 such that sub is contained within S[start:end]. Optional56 arguments start and end are interpreted as in slice notation.57 Raises ValueError when the substring is not found.58 """

59 defisdigit(self):60 """

61 S.isdigit() -> bool62 Return True if all characters in S are digits63 and there is at least one character in S, False otherwise.64 """

65 returnFalse66 defislower(self):67 """

68 S.islower() -> bool69 Return True if all cased characters in S are lowercase and there is70 at least one cased character in S, False otherwise.71 """

72 defisspace(self):73 """

74 S.isspace() -> bool75 Return True if all characters in S are whitespace76 and there is at least one character in S, False otherwise.77 """

78 defisupper(self):79 """

80 S.isupper() -> bool81 Return True if all cased characters in S are uppercase and there is82 at least one cased character in S, False otherwise.83 """

84 defjoin(self, iterable):85 """

86 S.join(iterable) -> str87 Return a string which is the concatenation of the strings in the88 iterable. The separator between elements is S.89 """

90 >>> n = ['alex','jack','rain']91 >>> '|'.join(n)92 'alex|jack|rain'

93 def ljust(self, width, fillchar=None):94 """

95 S.ljust(width[, fillchar]) -> str96 Return S left-justified in a Unicode string of length width. Padding is97 done using the specified fill character (default is a space).98 """

99 return ""

100 deflower(self):101 """

102 S.lower() -> str103 Return a copy of the string S converted to lowercase.104 """

105 return ""

106 def lstrip(self, chars=None):107 """

108 S.lstrip([chars]) -> str109 Return a copy of the string S with leading whitespace removed.110 If chars is given and not None, remove characters in chars instead.111 """

112 return ""

113 def replace(self, old, new, count=None):114 """

115 S.replace(old, new[, count]) -> str116 Return a copy of S with all occurrences of substring117 old replaced by new. If the optional argument count is118 given, only the first count occurrences are replaced.119 """

120 return ""

121 def rjust(self, width, fillchar=None):122 """

123 S.rjust(width[, fillchar]) -> str124 Return S right-justified in a string of length width. Padding is125 done using the specified fill character (default is a space).126 """

127 return ""

128 def rsplit(self, sep=None, maxsplit=-1):129 """

130 S.rsplit(sep=None, maxsplit=-1) -> list of strings131 Return a list of the words in S, using sep as the132 delimiter string, starting at the end of the string and133 working to the front. If maxsplit is given, at most maxsplit134 splits are done. If sep is not specified, any whitespace string135 is a separator.136 """

137 return[]138 def rstrip(self, chars=None):139 """

140 S.rstrip([chars]) -> str141 Return a copy of the string S with trailing whitespace removed.142 If chars is given and not None, remove characters in chars instead.143 """

144 return ""

145 def split(self, sep=None, maxsplit=-1):146 """

147 S.split(sep=None, maxsplit=-1) -> list of strings148 Return a list of the words in S, using sep as the149 delimiter string. If maxsplit is given, at most maxsplit150 splits are done. If sep is not specified or is None, any151 whitespace string is a separator and empty strings are152 removed from the result.153 """

154 return[]155 def startswith(self, prefix, start=None, end=None):156 """

157 S.startswith(prefix[, start[, end]]) -> bool158 Return True if S starts with the specified prefix, False otherwise.159 With optional start, test S beginning at that position.160 With optional end, stop comparing S at that position.161 prefix can also be a tuple of strings to try.162 """

163 returnFalse164 def strip(self, chars=None):165 """

166 S.strip([chars]) -> str167 Return a copy of the string S with leading and trailing168 whitespace removed.169 If chars is given and not None, remove characters in chars instead.170 """

171 return ""

172 defswapcase(self):173 """

174 S.swapcase() -> str175 Return a copy of S with uppercase characters converted to lowercase176 and vice versa.177 """

178 return ""

179 defupper(self):180 """

181 S.upper() -> str182 Return a copy of S converted to uppercase.183 """

184 return ""

185 defzfill(self, width):186 """

187 S.zfill(width) -> str188 Pad a numeric string S with zeros on the left, to fill a field189 of the specified width. The string S is never truncated.190 """

191 return ""

字典

引子

我们学了列表 , 现在有个需求, 把你们公司每个员工的姓名、年龄、职务、工资存到列表里,你怎么存?

1 staff_list =[2 ["Alex",23,"CEO",66000],3 ["黑姑娘",24,"行政",4000],4 ["佩奇",26,"讲师",40000],5 #[xxx,xx,xx,xxx]

6 #[xxx,xx,xx,xxx]

7 #[xxx,xx,xx,xxx]

8 ]

这样存没问题,不过你要查一个人的工资的话, 是不是得把列表遍历一遍

fori instaff_list:

ifi[0]=='黑姑娘':

print(i)

break

但假如你公司有2万人,如果你要找的黑姑娘正好在列表末尾,那意味着你要遍历2万次,才能找到这个信息。列表越大,查找速度越慢。

好了,现在福音来了, 接下来学要的字典可以 查询数据又快、操作又方便,是日后开发中必备神器。

字典是Python语言中唯一的映射类型。

定义:

{key1:value1,key2:value2}

1、键与值用冒号“:”分开;

2、项与项用逗号“,”分开;

示例:

info ={

"name":"小猿圈",

"mission":"帮一千万极客高效学编程",

"website":"http://apeland.com"

}

特性:

key-value结构

key必须为不可变数据类型、必须唯一

可存放任意多个value、可修改、可以不唯一

无序

查询速度快,且不受dict的大小影响,至于为何快?我们学完hash再解释。

创建操作

1 >>>person = {"name": "alex", 'age': 20}2 #或

3 >>>person = dict(name='seven', age=20)4 #或

5 >>>person = dict({"name": "egon", 'age': 20})6 #或

7 >>> {}.fromkeys([1,2,3,4,5,6,7,8],100)8 {1: 100, 2: 100, 3: 100, 4: 100, 5: 100, 6: 100, 7: 100, 8: 100}

增加操作

1 names ={2 "alex": [23, "CEO", 66000],3 "黑姑娘": [24, "行政", 4000],4 }5 #新增k

6 names["佩奇"] = [26, "讲师", 40000]7 names.setdefault("oldboy",[50,"boss",100000]) #D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

删除操作

1 names.pop("alex") #删除指定key

2 names.popitem() #随便删除1个key

3 del names["oldboy"] #删除指定key,同pop方法

4 names.clear() #清空dict

修改操作

dic['key'] = 'new_value',如果key在字典中存在,'new_value'将会替代原来的value值;

dic.update(dic2) 将字典dic2的键值对添加到字典dic中

查操作

1 dic['key'] #返回字典中key对应的值,若key不存在字典中,则报错;

2 dic.get(key, default = None)#返回字典中key对应的值,若key不存在字典中,则返回default的值(default默认为None)

3 'key' in dic #若存在则返回True,没有则返回False

4 dic.keys() 返回一个包含字典所有KEY的列表;5 dic.values() 返回一个包含字典所有value的列表;6 dic.items() 返回一个包含所有(键,值)元组的列表;

循环

1 1、for k indic.keys()2 2、for k,v indic.items()3 3、for k in dic #推荐用这种,效率速度最快

4 info ={5 "name":"小猿圈",6 "mission": "帮一千万极客高效学编程",7 "website": "http://apeland.com"

8 }9 for k ininfo:10 print(k,info[k])11 输出12 name 小猿圈13 mission 帮一千万极客高效学编程14 website http://apeland.com

求长度

len(dic)

练习题

用你能想到的最少的代码生成一个包含100个key的字典,每个value的值不能一样

{‘k0’: 0, ‘k1’: 1, ‘k2’: 2, ‘k3’: 3, ‘k4’: 4, ‘k5’: 5, ‘k6’: 6, ‘k7’: 7, ‘k8’: 8, ‘k9’: 9} 请把这个dict中key大于5的值value打印出来。

把题2中value是偶数的统一改成-1

请设计一个dict, 存储你们公司每个人的信息, 信息包含至少姓名、年龄、电话、职位、工资,并提供一个简单的查找接口,用户按你的要求输入要查找的人,你的程序把查到的信息打印出来

集合

定义

集合跟我们学的列表有点像,也是可以存一堆数据,不过它有几个独特的特点,令其在整个Python语言中占有一席之地,

里面的元素不可变,代表你不能存一个list、dict 在集合里,字符串、数字、元组等不可变类型可以存

天生去重,在集合里没办法存重复的元素

无序,不像列表一样通过索引来标记在列表中的位置 ,元素是无序的,集合中的元素没有先后之分,如集合{3,4,5}和{3,5,4}算作同一个集合

基于上面的特性,我们可以用集合来干2件事,去重和关系运算

语法

创建集合

1 >>> a = {1,2,3,4,2,'alex',3,'rain','alex'}2 >>>a3 {1, 2, 3, 4, 'alex', 'rain'}

由于它是天生去重的,重复的值你根本存不进去

帮列表去重

帮列表去重最快速的办法是什么? 就是把它转成集合,去重完,再转回列表

1 >>>b2 [1, 2, 3, 4, 2, 'alex', 3, 'rain', 'alex']3 >>>set(b)4 {1, 2, 3, 4, 'alex', 'rain'}5 >>>

6 >>> b = list(set(b)) #一句代码搞定

7 >>>b8 [1, 2, 3, 4, 'alex', 'rain']

增删改查

1 >>>a2 {1, 2, 3, 4, 'alex', 'rain'}3 #新增

4 >>> a.add('黑姑娘')5 #删除discard

6 >>>a7 {2, 3, '黑姑娘', 'alex', 'rain'}8 >>> a.discard('rain') #删除一个存在的值

9 >>> a.discard('rain2') #如果这个值不存在,do nothing.

10 >>>a11 {2, 3, '黑姑娘', 'alex'}12 >>>

13 #随机删除,少用,或特定场景用

14 >>> a.pop() #删除并返回

15 1

16 #删除remove

17 >>> a.remove(4)18 #查

19 >>>a20 {2, 3, '黑姑娘', 'alex', 'rain'}21 >>> 'alex' ina22 True23 #改

24 呵呵,不能改。。。

关系运算

1 s_1024 = {"佩奇","老男孩","海峰","马JJ","老村长","黑姑娘","Alex"}2 s_pornhub = {"Alex","Egon","Rain","马JJ","Nick","Jack"}3 print(s_1024 & s_pornhub) #交集, elements in both set

4 print(s_1024 | s_pornhub) #并集 or 合集

5 print(s_1024 - s_pornhub) #差集 , only in 1024

6 print(s_pornhub - s_1024) #差集, only in pornhub

7 print(s_1024 ^ s_pornhub) #对称差集, 把脚踩2只船的人T出去

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

1 print(s_1024.isdisjoint(s_pornhub)) #判断2个集合是不是不相交,返回True or False

2 print(s_1024.issubset(s_pornhub)) #判断s_1024是不是s_pornhub的子集,返回True or False

3 print(s_1024.issuperset(s_pornhub)) #判断s_1024是不是s_pornhub的父集,返回True or False

python之路day3_python之路:day3相关推荐

  1. 开启Python自动化运维之路

    关于Python的入门,推荐Dive into Python及廖雪峰的Python教程. 第一个程序 学一门语言,按惯例都要先来一个Hello World! 代码高亮效果 代码如下: print(&q ...

  2. python自动化运维之路~DAY1

    python自动化运维之路~DAY1 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.文件大小单位单位换算 我们一起看一下下面的图: 没错,都是数字,而且这些数字都是二进制的数字 ...

  3. Python小白的进阶之路---Day5

    Python小白的进阶之路---Day5 1.file 1.1打开文件方式(读写两种方式) 1.2文件对象的操作方法 1.3学习对excel及csv文件进行操作 2.os模块 3.datatime模块 ...

  4. python 全栈开发之路 day1

    python 全栈开发之路 day1 本节内容 计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进 ...

  5. 【学无止境】Python技术栈起步之路 (01)—— 需求与环境

    Python技术栈起步之路 (01)-- 需求与环境 1 技术之前的事情 2 找到适合自己的技术栈 3 初步上手 3.1 安装Python3及pipenv 3.2 安装vscode和python相关插 ...

  6. python自动化运维之路~DAY6

    python自动化运维之路~DAY6 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.  如果你想开发一款游戏,会存在角色的混搭的情况,这个时候"面向对象过程"就出 ...

  7. 2021-02-25 Python人工智能(自学之路)分享(一)

    Python人工智能(自学之路)分享(一) 这是本人学习Python的一些学习笔记和项目练习 一般每周都会更新博客 链接:https://pan.baidu.com/s/1k8cFgnvWlSkK7u ...

  8. Python小白的进阶之路---Day2

    Python小白的进阶之路---Day2 1. 列表 1.1 标志 1.2 基本操作 (1)创建列表 (2)向列表添加元素 (3)从列表删除元素 (4)拷贝 1.3列表相关方法 2.元祖 2.1标志 ...

  9. 战争热诚的python全栈开发之路

    战争热诚的python全栈开发之路 从学习python开始,一直是自己摸索,但是时间不等人啊,所以自己为了节省时间,决定报个班系统学习,下面整理的文章都是自己学习后,认为重要的需要弄懂的知识点,做出链 ...

最新文章

  1. 程序员效率低下的35个坏习惯
  2. 深入理解Memcache原理
  3. dblclick,默认全选屏蔽
  4. 江西住建云实名认证怎么弄_王者荣耀无限时间怎么弄 2020年无限时间账号
  5. fmc接口定义_STM32接口FSMC/FMC难点详解
  6. oracle初始化序列值,如何修改序列(Sequence)的初始值(START WITH)
  7. vue使用 xterm_为什么我坚持使用xterm
  8. jquery mysql表格_使用jQuery设计数据表格:设计表格基类
  9. 深入理解Flex布局以及计算
  10. web 网站抢购并发
  11. Car2go 的前端框架选择
  12. openfire 加 spark组建局域网聊天室
  13. 机器学习-DBSCAN密度聚类
  14. adb连接手机全过程(以oppo手机为例)(解决adb devices 找不到设备)
  15. 数据库连接中的等值连接、自然连接、外连接、左外连接和右外连接
  16. Word2019 未找到 MathPage.wll 文件的解决方法
  17. 无纸化车间是怎样实现的,能给企业生产带来什么?
  18. JavaScript - 语言进阶
  19. 汽车大数据探索从汽车数据营销发起
  20. 树的遍历(python)

热门文章

  1. Java8新特性之空指针异常的克星Optional类
  2. Windows ActiveMq开机自启动设置
  3. 二元加权电容器阵列的构造性共质心布局与布线
  4. CSS弹性盒子布局flex
  5. oracle 高级函数
  6. java 抓取搜狗微信_搜狗微信公众号文章抓取
  7. 私网地址与公网地址是如何转换的?
  8. 网络协议之TCP和UDP
  9. 12月6日云栖精选夜读:语音购票、刷脸进站:上海联手阿里打造全球首个AI地铁之城...
  10. android监控io产生的应用,Android IO性能分析及排查