python-day2

一、字节、三元运算、进制

 1、字节

首先要说明得是,python2 默认是 ASCII,python 3默认是 unicode。Python 3最重要的新特性就是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。但是在Python2中文本和二进制数据没有做清晰的区分。

 1个中文字符 = 2个字节

1个英文字符(string) = 1个字节
1个字节(bytes) = 8个bite

网络实际传输过程中用的 bit,   1000bit/s,1000/8  为实际传过来字节数,在python中的socket网络传输中,用的是字节,而不是字符。

字符串可以编码(encode)成字节包,字节包也可以解码(decode)成字符串。

 

Python3中编码和解码,默认字符编码是utf-8,如果想在编码或者解码中起其他字符编码,则换成其他编码。但是在Python2中,默认字符是系统编码,需要自己手动输入字符编码。

>>> a = "我叫便便"
>>> a.encode('utf-8')
b'xe6x88x91xe5x8fxabxe4xbexbfxe4xbexbf'
>>> a.encode('utf-8').decode('utf-8')
'我叫便便'

2、三元运算

result = 值1 if 条件 else 值2

 如果条件为真:result = 值1
 如果条件为假:result = 值2

a,b,c = 1,2,5
d = a if a > b else c

a > b 为True的话 d = a

a > b 为Falsec的话 d = c

注:1、条件语句的值,都是布尔类型的值,如:if 条件,  while 条件等;

      2、python 中没有  case

3、进制

二进制: 0 1
八进制: 0~7 000 001 010 011 100 101 110 111 3位
十进制:0~9 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001
十六进制: 0~F  0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

进制用在IP地址中:IP地址:255.255.255.255    11111111.11111111.11111111.11111111  8位

IPv4地址分为A,B,C,D,E类:

A类:1.0.0.0~126.255.255.255,默认子网掩码/8,即255.0.0.0 (其中127.0.0.0~127.255.255.255为环回地址,用于本地环回测试等用途;

B类:128.0.0.0~191.255.255.255,默认子网掩码/16,即255.255.0.0;

C类:192.0.0.0~223.255.255.255,默认子网掩码/24,即255.255.255.0;

D类:224.0.0.0~239.255.255.255,一般于用组播
E类:240.0.0.0~255.255.255.255(其中255.255.255.255为全网广播地址,E类地址一般用于研究用途。

二、列表

1、列表特点

列表是Python最常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改等操作。
不管列表中的元素是简单的数据类型还是复杂数据类型,都可以增加,修改,删除,查询等操作。

2、定义列表
列表在python中属于复杂数据类型(列表、元祖、字典),简单数据类型指:字符串、数字、布尔值.....

names = list()
names = [] #定义空列表
names = ['a','b','c'] #定义非空列表

3、列表的属性


type() : 查看是属于哪个类的,属于哪个数据类型

>>> name=['a','b','c']
>>> type(name)
<class 'list'>

id() : 查看变量的内存地址

>>> id(name)
4536524616  

dir() : 查看对象的属性和方法

>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__',
'__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__',
'__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__',
'__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

name = ['a','b','c'] 

列表的取值:是从第0个元素开始取值 names[0]、names[1].....
如果取值>= len(names) 就会报错。

>>> name[3]
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    name[3]
IndexError: list index out of range

注:列表元素支持的数据类型:

  • 支持简单的数据类型: 字符串、数字、布尔值、日期等等

  • 支持复杂的数据类型: 列表、元祖、字典

3、切片

列表、元祖、字符串都支持切片。

>>> names[1:]
['b', 'c', 'd', 'a']
>>> names[1:-1]
['b', 'c', 'd']
>>> names[1:4]
['b', 'c', 'd']
>>> names[-1]
'a'
>>> names[-4:-1]
['b', 'c', 'd']
>>> name = names[-4:-1]
>>> name
['b', 'c', 'd']
>>> name.append('e')
>>> name
['b', 'c', 'd', 'e']

 切片小结:

  • 序列始终都是从左向右切片的,不能是从右向左 

  • 列表切片时,起始位的元素是包括的,结束位的元素是不包括(又叫顾头不顾尾),最后一个位置表示步长(names[开始位:结束位:步长])

  • 如果从0位置取值,0可以省略

  • 想取最后一个值时,结束位不能是-1,因为结束位的元素不包括,所以只能留空

4、列表属性和方法

(1)append(element) 追加

>>> name.append('d')
>>> name
['a', 'b', 'c', 'd']

(2)clear() 清除列表中的所有元素

>>> name.clear()
>>> name
[]

(3)count(element) 统计某个元素在列表中出现的次数

>>> name.count('a')
1
>>> name.append('a')
>>> name.count('a')
2
# 统计某个切片中元素个数
>>> name[1:].count('a')
1

(4)extend(list) 把两个列表 整合成一个列表

>>> age = [19,20,21,22]
>>> name.extend(age)
>>> name
['a', 'b', 'c', 'd', 'a', 19, 20, 21, 22]

(5)index(element) 查看某个元素的第一个值的下标值

>>> name.index('a')
0
>>> name[1:].index('a')
3

(6)insert(index,element) 在某个位置上插入一个元素

>>> name.insert(1,'bianbian')
>>> name
['a', 'bianbian', 'b', 'c', 'd', 'a', 19, 20, 21, 22]

(7) pop 默认删除最后一个元素,并且把最后一个元素赋值出来

>>> name.pop()
22
>>> name
['a', 'bianbian', 'b', 'c', 'd', 'a', 19, 20, 21]
>>> a = name.pop()
>>> name
['a', 'bianbian', 'b', 'c', 'd', 'a', 19, 20]
>>> a
21
#删除某个下表下的元素
>>> b = name.pop(1)
>>> name
['a', 'b', 'c', 'd', 'a', 19, 20]
>>> b
'bianbian'

(8) remove(element) 删除某个元素,但是不会把值赋值出来

>>> name
['a', 'b', 'c', 'd', 'a', 19, 20]
>>> name.remove('a')
>>> name
['b', 'c', 'd', 'a', 19, 20]
>>> name.remove('a')
>>> name
['b', 'c', 'd', 19, 20]

(9) reverse() 反转列表中的元素

>>> name
['b', 'c', 'd', 19, 20]
>>> name.reverse()
>>> name
[20, 19, 'd', 'c', 'b']

(10) sort() 排序

>>> name
['b', 'a', 'm', 'd']
>>> name.sort()
>>> name
['a', 'b', 'd', 'm']

(11) del 既可以删除元素、也可以删除 内存对象

>>> name = ['a','b','c','d']
>>> id(name)
2754836098312
>>> del name[0]
>>> id(name)
2754836098312
>>> del name

三、元组

元组跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表。

用途:一般情况下用于自己写的程序能存下数据,但是又希望这些数据不会被改变,比如:数据库连接信息等。

1、元祖特点

  • 根本特点:元素的内存的地址,不可以被修改

  • 简单的数据类型:可以查看、统计

  • 复杂数据类型:列表和字典

2、定义元祖

#定义空元祖
names = ()
names = tuple()
#定义一个非空元祖
names = ('a','b','c','d')

3、访问元祖中的元素

>>> name = ('a','b','c','d')
>>> name[0]
'a'
>>> name[1]
'b'
>>> name[-1]
'd'	

3、切片

切片参考列表切片。

>>> name[1:]
('b', 'c', 'd') 

4、方法

  • count()统计元组中一个元素出现的次数

>>> names = ('a','b','c','d','a','b','a')
>>> names.count('a')
3
  • index()

index() 确认元组中一个元素出现第一次的下标值。

>>> names.index('a')
0

5、元素类型为复杂数据类型

>>> name = ([1,2,3,4],'a','b')
>>> name[0].append(5)
>>> name
([1, 2, 3, 4, 5], 'a', 'b')
>>> id(name[0])
2754836098312
>>> name[0].append(6)
>>> name
([1, 2, 3, 4, 5, 6], 'a', 'b')
>>> id(name[0])
2754836098312

可以看出元组的元素类型为复杂数据类型,元组一样可以做追加、统计等操作,且元组的内存地址不变。

6、enumenrate()用法

enumenrate()是Python自带的函数,主要用于列表或者元组,功能:是在for循环时,获取列表或者元组的下标值和元素

  • 下标和元素以元组形式输出

>>> name_list = [('a',1),('b',2)]
>>> for index in enumerate(name_list):
...     print(index)
#输出结果,获取到的是以元组形式输出,每个元组第一个值表示name_list下标值,第二个值表示name_list的元素    
(0, ('a', 1))
(1, ('b', 2))
  • 下标值和元素分开输出

>>> name_list = [('a',1),('b',2)]
>>> for index,name in enumerate(name_list):
...     print(index,name)
...
#第一个值name_list的下标值,第二个是name_list的元素    
0 ('a', 1)
1 ('b', 2)

7、isdigit()用法

判断输出的数值是否是数字类型的变量。

age=input("age:")
if age.isdigit():
	age = int(age)
	print('your age is:{0}',format(age))
else:
    print('input is not digit!')  

 




 

原文地址:https://www.cnblogs.com/bianfengjie/p/9355251.html