一、Python数据类型

在Python中有4种类型的数,整数,长整数,浮点数和复数。

  • 2是一个整数的例子
  • 长整数不过是大一点的整数
  • 3.23和52.3E是浮点数的例子。E标记表示10的幂。52.3E-4表示52.3 * 10-4
  • (-5+4j)和(2.3-4.6j)是复数的例子

C语言:

C语言数据类型分为基本类型,构造类型,指针类型,和空类型。

  • 基本类型又分为整型:短整型(short int),基本整型(int)和长整型(long int);字符型(char);实型(浮点型):单精度型(float)和双精度型(double);枚举类型
  • 构造类型:数组类型,结构体类型,共用体类型
  • 指针类型(C语言的精华)
  • 空类型(void)

int类型

在32位机器上,整数的位数为32位,取值范围为-231~231-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-263~263-1,即-9223372036854775808~9223372036854775807

long int长整型

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

float浮点数

浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。

complex复数

复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。

注:Python中存在小数字池:-5 ~ 257

字符串

字符串是字符的序列,字符串基本上就是一组单词。

下面是如何在Python中使用字符串:

  • 使用单引号(')

    你可以使用单引号指示字符串,例如'hello, world!'所有的空白,即空格和制表符都原样保留

  • 使用双引号(")

    在双引号的字符串和在单引号的字符串使用完全相同,例如:"What's your name?"

  • 使用三引号('''或""")

    利用三引号你可以格式化一个多行字符串,你可以在三引号中自由的使用单引号或双引号。例如

    '''hello,what's your name?

    Is "apple" a fruit or a cell phone?

    '''

  • 转义符

    假如你要在一个字符串中包含一个'单引号,你该怎么表示?例如What's your name? 是这样吗'What's your name?',肯定不是这样,因为Python字符串从何时开始,何时结束。可以通过转义符来完成这个任务 :'What's your name?'

    另外还有一个方法是用双引号,即 "What's your name?",当然双引号的字符串里还有双引号的话,这时就需要转义\"

万恶的字符串拼接:

python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

操作字符串的一些方法:

  • 去掉字符串前后的字符

    .strip([chars])把str中前后chars中有的字符全部去掉,可以理解为把S前后chars替换为None

str = ' hello,world! '

str.strip() #把字符串前后的空格都去掉

'hello,world'

str.lstrip() #把字符串左边的空格去掉

'hello,world '

str.rstrip() #把字符串右边的空格去掉

' hello,world'

```
  • 字符串分隔

    split([sep, [maxsplit]]) 以sep为分隔符,把str分成一个list。maxsplit表示分割的次数。默认的分割符为空白字符.

str = 'Tom,Jerry,Jack,Rose'

str.split(',') #以逗号为分隔符

['Tom','Jerry','Jack','Rose']

```
  • 字符串中字符大小写的变换

str = 'Alex,how are you?'

str.lower() #将所有大写字符转换为小写

'alex,how are you?'

str.upper() #将所有小写字符转换为大写

'ALEX,HOW ARE YOU?'

str.swapcase() #大小写字符互换

'aLEX,HOW ARE YOU?'

str.capitalize() #首字母大写

'Alex,how are you?'

```
  • 字符串在输出时的对齐

    ljust(width,[fillchar]) 输出width个字符,str左对齐,不足部分用fillchar填充,默认的为空格。

str = 'Welcome'

str.ljust(50,'-') #左对齐

'Welcome-------------------------------------------'

str.rjust(50,'-') #右对齐

'-------------------------------------------Welcome'

str.center(50,'-') #居中

'---------------------Welcome----------------------'

```
  • 字符串查找

    find(substr, [start, [end]]) 返回str中出现substr的第一个字母的标号,如果str中没有substr则返回-1。start和end作用就相当于在S[start:end]中搜索.

    index(substr, [start, [end]]) 和find一样,只是在str中没有substr时,会返回一个运行时错误.

    rfind(substr, [start, [end]]) 返回str中最后出现的substr的第一个字母的标号,如果str中没有substr则返回-1,也就是说从右边算起的第一次出现的substr的首字母标号.

    rindex((substr, [start, [end]]) 同理

str = 'hello,world,hello,world'

str.find('hello')

0

str.find('world')

6

str.find('haha')

-1

str.index('hello')

0

str.index('world')

6

str.index('haha')

Traceback (most recent call last):

File "", line 1, in

str.index('haha')

ValueError: substring not found

str.rfind('hello')

12

str.rindex('hello')

12

str.rfind('haha')

-1

str.rindex('haha')

Traceback (most recent call last):

File "", line 1, in

str.rindex('haha')

ValueError: substring not found

```
  • 字符串判断

    startswith(prefix[,start[,end]]) 是否以prefix开头。

    endswith(suffix[,start[,end]]) 是否以suffix结尾。

str = 'hello,world,hello,world'

str.startswith('hello')

True

str.endswith('world')

True

```
```
isalnum() #是否全是字母和数字,并至少有一个字符
isalpha() #是否全是字母,并至少有一个字符
isdigit() #是否全是数字,并至少有一个字符
isspace() #是否全是空白字符,并至少有一个字符
islower() #S中的字母是否全是小写
isupper() #S中的字母是否便是大写
istitle() #S是否是首字母大写的
这个就不举例子了。
```
  • 字符串切片

str = 'hello,world'

str[0]

'h'

str[0:4]

'hell'

str[:4]

'hell'

str[4:6]

'o,'

str[4:]

'o,world'

str[-1]

'd'

str[::2]

'hlowrd'

```

列表

列表的创建

name_list = ['alex', 'seven', 'eric']
或:
name_list = list(['alex', 'seven', 'eric'])

列表的操作:

  • 列表的取值

    列表的取值是通过下标来取值的,下标默认从0开始

name_list = ['alex','seven','eric']

name_list[0]

'alex'

```
  • 列表的切片

    列表的切片和字符串的切片方法完全相同,请参照字符串切片

  • 列表的插入

    L.insert(index, object) 在index之前插入一个元素

name_list = ['alex','seven','eric']

name_list.insert(2,'tom')

name_list

['alex', 'seven', 'tom', 'eric']

```
  • 列表的删除

    L.remove(value) 去除这个列表第一个出现的 value.如果value不存在会报ValueError错误

name_list.remove('tom')

name_list

['alex', 'seven', 'eric']

```
L.pop([index]) 去除下标为index的元素并返回这个元素(默认为最后一个元素).如果列表为空或者下标超出范围将会报IndexError错误.
```

name_list

['alex', 'seven', 'eric']

name_list.pop()

'eric'

name_list

['alex', 'seven']

name_list.pop(0)

'alex'

name_list

['seven']

```
  • 列表的追加

    L.append(object) 追加一个元素到列表末尾

name_list

['seven']

name_list.append('jerry')

name_list

['seven', 'jerry']

```
  • 列表元素的统计

    L.count(value) -> 返回value元素的数量

name_list

['alex', 'seven', 'eric', 'jerry', 'alex']

name_list.count('alex')

2

```
  • 获取元素的下标

    L.index(value, [start, [stop]]) 返回找到的第一个元素的下标,如果这个value元素不存在则会报ValueError错误.

name_list

['alex', 'seven', 'eric', 'jerry', 'alex']

name_list.index('alex')

0

```
  • 列表排序

    在2.x的Python,如果列表里有数字和字符串,是可以排序的,按照ASCII码的顺序排,在Python3.X 会报错。

name_list

['alex', 'seven', 'eric', 'jerry', 'alex']

name_list.sort()

name_list

['alex', 'alex', 'eric', 'jerry', 'seven']

```
  • 列表反转

name_list

['alex', 'alex', 'eric', 'jerry', 'seven']

name_list.reverse()

name_list

['seven', 'jerry', 'eric', 'alex', 'alex']

```
  • 列表的扩展

    >>> name_list

['seven', 'jerry', 'eric', 'alex', 'alex']

names = ['tom','jack','rose']

name_list.extend(names)

name_list

['seven', 'jerry', 'eric', 'alex', 'alex', 'tom', 'jack', 'rose']

```

元组(不可变列表)

元组的创建:

numbers = (11, 22, 33, 44, 55)
或:
numbers = tuple((11, 22, 33, 44, 55))

元组的操作:

  • 统计元素数量

    T.count(value) 返回元素vaule的数量

numbers = (10,22,32,43,88,10)

numbers.count(10)

2

```
  • 找出元素的下标

    T.index(value, [start, [stop]]) -> integer -- 返回找到的第一个元素的下标. 如果这个元素不存在会报ValueError错误.

numbers = (10,22,32,43,88,10)

numbers.index(10)

0

```

字典(无序)

创建字典:

person = {"name": "tom", 'age': 18}
或:
person = dict({"name": "tom", 'age': 18})

字典的操作:

  • 获取key的值

    D.get(k[,d]) -> D[k] if k in D, else d. d defaults to None.

person = {'name':'tom','age':18} #创建一个字典

person.get('name') #获取字典key为name的值

'tom'

person.get('sex') #获取字典key为sex的值,如果 key不存在,不报错,什么也不返回

person.get('sex',None) #可以设置一个默认的值,如果key不存在,返回默认的值

None

person['name'] #也可以通过[]的方式获取key的值

'tom'

person['sex'] #如果key不存在会报错

Traceback (most recent call last):

File "", line 1, in

person['sex']

KeyError: 'sex'

```
  • 获取字典中的所有key

person.keys()

dict_keys(['name', 'age'])

```
  • 获取字典中的所有value

person.values()

dict_values(['tom', 18])

```
  • 将字典转换为[(key,value),(key,value)...]

person.items()

dict_items([('name', 'tom'), ('age', 18)])

```
  • 删除字典内所有元素

person.clear()

person

{}

```
  • 删除字典内某一个元素

person = {'name':'tom','age':18}

person.pop('age')

18

```
  • 把字典dict2的键/值对更新到dict里

person = {'name':'tom','age':18}

single = {'sex':'f','phone':'13231012345'}

person.update(single)

person

{'phone': '13231012345', 'name': 'tom', 'sex': 'f', 'age': 18}

```
  • 创建一个新字典

    dict.fromkeys(S[,v]) 创建一个新字典,这个字典的所有的keys都来自己于S,所有的值都是v

fields = ['id','name','age']

person = {}

person.fromkeys(fields,None)

{'age': None, 'id': None, 'name': None}

```
  • **获取key的值,如果这个字典中key不存在,则会增加一个元素D[k] = d **

    D.setdefault(k[,d]) -> D.get(k,d), also set D[k]=d if k not in D

person = {'name':'tom','age':18}

person.setdefault('country','China')

'China'

person

{'age': 18, 'name': 'tom', 'country': 'China'}

```
  • 浅复制字典

    D.copy() D字典的浅复制 ,只会复制第一层,第二层不会(我觉得应该是第一层字典存的是第二层字典的地址,copy的时候只是把这个地址copy过去,但还是指向相同的地方,所以当第一个字典改变第二层的值的时候,第二个字典也跟着变了)

person = {'name':'tom','age':18,'addr':{'country':'China','province':'Hebei'}}

single = person.copy()

person

{'addr': {'country': 'China', 'province': 'Hebei'}, 'name': 'tom', 'age': 18}

single

{'addr': {'country': 'China', 'province': 'Hebei'}, 'name': 'tom', 'age': 18}

person['name'] = 'jerry'

person

{'addr': {'country': 'China', 'province': 'Hebei'}, 'name': 'jerry', 'age': 18}

single

{'addr': {'country': 'China', 'province': 'Hebei'}, 'name': 'tom', 'age': 18}

person['addr']['country'] = 'America'

person

{'addr': {'country': 'America', 'province': 'Hebei'}, 'name': 'jerry', 'age': 18}

single

{'addr': {'country': 'America', 'province': 'Hebei'}, 'name': 'tom', 'age': 18}

```

数据运算

  1. 算数运算

  2. 比较运算

  3. 赋值运算

  4. 逻辑运算

  5. 成员运算

  6. 身份运算

  7. 位运算

  8. 运算优先级

Python之路第二天,基础(2)-基本数据类型的更多相关文章

  1. python之路第二篇(基础篇)

    入门知识: 一.关于作用域: 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. if 10 == 10: name = 'allen' print name 以下结论对吗? ...

  2. Python之路(第二篇):Python基本数据类型字符串(一)

    一.基础 1.编码 UTF-8:中文占3个字节 GBK:中文占2个字节 Unicode.UTF-8.GBK三者关系 ascii码是只能表示英文字符,用8个字节表示英文,unicode是统一码,世界通用 ...

  3. Python之路,day3-Python基础

    三级菜单 menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, '汽车之家':{}, ...

  4. python自动化开发-[第二天]-基础数据类型与编码(续)

    今日简介: - 编码 - 进制转换 - 初识对象 - 基本的数据类型 - 整数 - 布尔值 - 字符串 - 列表 - 元祖 - 字典 - 集合 - range/enumcate 一.编码 encode ...

  5. Python之路(第二十九篇) 面向对象进阶:内置方法补充、异常处理

    一.__new__方法 __init__()是初始化方法,__new__()方法是构造方法,创建一个新的对象 实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法 __ ...

  6. Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类

    一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...

  7. Python之路(第二十五篇) 面向对象初级:反射、内置方法

    [TOC] 一.反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它 ...

  8. Python之路(第二十四篇) 面向对象初级:多态、封装

    一.多态 多态 多态:一类事物有多种形态,同一种事物的多种形态,动物分为鸡类,猪类.狗类 例子 import abc class H2o(metaclass=abc.ABCMeta): ​ def _ ...

  9. Python之路(第二十三篇) 面向对象初级:静态属性、静态方法、类方法

    一.静态属性 静态属性相当于数据属性. 用@property语法糖装饰器将类的函数属性变成可以不用加括号直接的类似数据属性. 可以封装逻辑,让用户感觉是在调用一个普通的数据属性. 例子 class R ...

随机推荐

  1. Flask学习记录之Flask-WTF

    Flask-wtf时Wtforms库的flask框架扩展,能够方便的处理Web表单 一.定义一个web表单 使用flask-wtf时,每个web表单都由一个继承自flask.ext.wtf.Form的 ...

  2. IIC 概述之用IO模拟

    最近做的一个项目,是基于IIC总线通信的传感器系统.由于另外一个传感器使用的是类IIC协议,而不是标准IIC,所以MCU不能与其通信,最后没有办法,只有通过I/O口模拟的方式实现IIC的总线通信.具体 ...

  3. 注册nodejs程序为windows服务

    转载地址:http://www.grati.org/?p=236 应lemonhall要求,写一篇在windows中部署nodejs程序的文章,并提供了how to node上 “deploying- ...

  4. cf C. Levko and Array Recovery

    http://codeforces.com/contest/361/problem/C 这道题倒着一次,然后正着一次,在正着的一次的时候判断合不合法就可以. #include <cstdio&g ...

  5. windows设备驱动安装指南

    高观点下的设备驱动安装(overview) 一.windows是怎样安装设备的? 第一步:新设备的识别 在给一个新设备安装驱动之前,总线或集线器(hub)驱动会为连接到PC上的设备分配一个硬件ID(h ...

  6. scheme 阴阳谜题

    本篇分析continuation的一个著名例子"阴阳迷题",这是由David Madore先生提出的,原谜题如下: (let* ((yin ((lambda (foo) (disp ...

  7. 微软 Dynamics AX 学习步骤

    第一步:了解到AX的架构,AOT结构,了解AOT中表,窗体,类,job,菜单,菜单项的基础开发.知道代码可以写在那里,每个对象以及对象内部的具体设置.如果你不了解类,继承,这些,那么就需要找一下讲述类 ...

  8. Linux中部署JAVA程序

    JAVA程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器. JAVA是跨平台的编程语言,服务器的操作系统可以是Windows.Linux或者其它,下面 ...

  9. 升级 pip版本

    安装第三方库:pip install Pillow 出现 You are using pip version 7.1.2, however version 9.0.1 is available. Yo ...

  10. testng xml 示例

    TestNG的DTD检查文件:http://testng.org/testng-1.0.dtd.php 更多testng配置及说明,请移步http://testdoc.org/docmaster?pi ...