python学习

python基础之数据类型和变量

一、整数

Python可以处理任意大小的整数,当然包括负整数,在程序中的表示方法和数学上的写法一模一样,例如:1,100,-8080,0,等等。

二、浮点数

浮点数也就是小数,之所以称为浮点数,是因为按照科学记数法表示时,一个浮点数的小数点位置是可变的,比如,1.23x109和12.3x108是相等的。浮点数可以用数学写法,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x109就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。

整数和浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的(除法难道也是精确的?是的!),而浮点数运算则可能会有四舍五入的误差。

三、字符串

字符串是以单引号''或双引号"" 括起来的任意文本,比如'abc',"xyz"等等。

'''...'''三引号可以用来显示多行字符串内容,如:

>>> print '''line1
... line2
... line3'''
line1
line2
line3

如涉及到中文字符,尽量在字符串前面加u,如u'张三'

%s表示用字符串替换,%d表示用整数替换,有几个%?占位符,后面就跟几个变量或者值,顺序要对应好。

>>> 'Hello, %s' % 'world'
'Hello, world'
>>> 'Hi, %s, you have $%d.' % ('Michael', 1000000)
'Hi, Michael, you have $1000000.'

format()

另一种格式化字符串的方法是使用字符串的format()方法,它会用传入的参数依次替换字符串内的占位符{0}{1}……,不过这种方式写起来比%要麻烦得多:

'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)

字符串拼接直接对两字符串相加即可

>>> 'hello' + ' world!'
'hello world!'

注意:

由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

四、布尔值

布尔值只有TrueFalse两种值。

五、空值

空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值

六、操作符

算术运算符: +(加), -(减), *(乘), /(除), %(求余), **(指数运算)

比较运算符: == , != , > , >= , < , <=

赋值运算符: =, += , -= , *= , /= , %= , **= , //=

逻辑运算符: and , or , not

成员运算符: in , not in

身份运算符: is / is not

七、变量

变量在程序中就是用一个变量名表示了,变量名必须是大小写英文、数字和_的组合,且不能用数字开头。

如:

a = 1

变量a是一个整数。

t_007 = 'T007'

变量t_007是一个字符串。

Answer = True

变量Answer是一个布尔值True

这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如Java是静态语言,赋值语句如下(// 表示注释):

int a = 123; // a是整数类型变量
a = "ABC"; // 错误:不能把字符串赋给整型变量

和静态语言相比,动态语言更灵活,就是这个原因。

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:

a = 'ABC'
b = a
a = 'XYZ'
print b

最后打印的b即是:'ABC'

常量

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

在计算机内部,可以把任何数据都看成一个“对象”,而变量就是在程序中用来指向这些数据对象的,对变量赋值就是把数据和变量给关联起来。

八、List和tuple

List

这就是Java或C中的数组.它是一个容器,能用来顺序的,以整数索引方式检索, 存储一组对象. List[] 来表示,如 [1, 2, 3] 就是一个List;而 Tuple() 来表示,如 (3, 4, 5) 就是一个 Tuple .

它们的区别在于List是可变的;而Tuple是不可变的.也就是说不可以增,删和改.

索引方式除了与Java一样的以一个整数下标方式外,还可以指定开始,结束和步长,和使用负索引来分割List:

通用语法格式是: list[start: end: step]

list[index] --- 返回第(index+1)个元素,下标从0开始  
list[start:end] --- 返回从start开始,到end-1,也就是list[start], list[start+1].....list[end-1]  
list[start:end:step] --- 与上面类似,只不过每隔step取一个  
list[:end]  ---- 缺省的开端是0  
list[start:] ---- 缺省的结尾是len(list),或者-1  
负数索引更是方便,它与正数的对应关系为:  
正数索引   0    1      2      3
数组元素  [1]   [3]    [5]    [7]
负数索引  -4    -3      -2    -1

实例:

>>> a = [1, 3, 5, 7];  
>>> a[0]  
1  
>>> a[3]  
7  
>>> a[-1]  
7  
>>> a[-2]  
5  
>>> a[0:3]  
[1, 3, 5]  
>>> a[1:3:2]  
[3]  
>>> a[0:3:2]  
[1, 5]  
>>> a[0:-1:2]  
[1, 5]  
>>>

list增删查改:

//list是一个可变的有序表,所以,可以往list中追加元素到末尾:
list.append('Adam')
//也可以把元素插入到指定的位置,比如索引号为1的位置:
list.insert(1, 'Jack')
//要删除list末尾的元素,用pop()方法:
list.pop()
//要删除指定位置的元素,用pop(i)方法,其中i是索引位置:
list.pop(i)

list里面的元素的数据类型也可以不同

list里面也可以包含list

list的遍历:

for item in sequence:
        process(item)
        
#如果要取到某个item的位置,可以这样写:
for index in range(len(sequence)):
        process(sequence[index])

for index,item in enumerate(sequence):
        print index,item

tuple
tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:

classmates = ('Michael', 'Bob', 'Tracy')

现在,classmates这个tuple不能变了,它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素。

tuple里面的元素如果是一个可变对象,那么这个对象的子属性是可以被改变的,对象本身的索引是不可改变的。

如tuple里面包含一个listA,我们可以往listA里面append,insert,但是你不能对listA赋值,不能删掉listA。

九、dict和set

dict

dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。

例:

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95
>>> d['Michael'] = 90
>>> d['Michael']
90

  • 多次对一个key放入value,后面的值会把前面的值冲掉
  • 如果key不存在,dict就会报错
    要避免key不存在的错误,有两种办法,一是通过in判断key是否存在:
>>> 'Thomas' in d
False

二是通过dict提供的get方法,如果key不存在,可以返回None,或者自己指定的value:

>>> d.get('Thomas')
>>> d.get('Thomas', -1)
-1
  • pop(key) 删除并返回该条目值(键值对)
  • del d[key] 也可以删除指定元素

遍历dict

# 方法一
for key in d: 
     n = d[key]
     
# 方法二:最慢
for k,v in d.items(): 
    n = v

# 方法三: 最快,推荐方法
for k,v in d.iteritems(): 
    n = v 

# 方法四
for k,v in zip(d.iterkeys(),d.itervalues()): 
    n = v 

set

set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

要创建一个set,需要提供一个list作为输入集合:

>>> s = set([1, 2, 3])
>>> s
{1, 2, 3}

重复元素在set中自动被过滤:

>>> s = set([1, 1, 2, 2, 3, 3])
>>> s
{1, 2, 3}

通过add(key)方法可以添加元素到set中,可以重复添加,但不会有效果

>>> s.add(4)
>>> s
{1, 2, 3, 4}
>>> s.add(4)
>>> s
{1, 2, 3, 4}

通过remove(key)方法可以删除元素:

>>> s.remove(4)
>>> s
{1, 2, 3}

set可以看成数学意义上的无序和无重复元素的集合,因此,两个set可以做数学意义上的交集、并集等操作:

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

十、分支语句

格式为:

if expression:  
      blocks;  
elif expression2:  
      blocks;  
else:  
      blocks; 

十一、循环

for循环

格式:

for x in list:
    break;
# 取出下标和值
for index,value in enumerate(A):
     print index

例:

names = ['Michael', 'Bob', 'Tracy']
for name in names:
    print(name)
//或者
for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
    print(x)

while循环

格式:

while expression:
      blocks
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容