Python变量和数据类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#数据类型
print(0xff00); #十六进制用0x前缀和0-9,a-f表示
 
print(1.23e9); # 对于很大或很小的浮点数,就必须用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
 
#在Python中,可以直接用True、False表示布尔值(请注意大小写)布尔值可以用and、or和not运算。
 
#空值是Python里一个特殊的值,用None表示。None不能理解为0,因为0是有意义的,而None是一个特殊的空值。
 
 
#----------------------------------------
#print语句
print 'hello, world'
print 'The quick brown fox''jumps over''the lazy dog' #遇到逗号“,”会输出一个空格
print '100 + 200 ='100 + 200 #计算100 + 200的结果
 
#--------------------------------------------
#变量
= 1 #变量是用一个变量名表示,变量名必须是大小写英文、数字和_的组合,且不能用数字开头
 
#可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量,称为动态语言
 
#-------------------------------------------
#可以使用转义字符 \ 、\n、\t等等
 
#-------------------------------------------
#raw字符串与多行字符串
print (r'\(~_~)/ \(~_~)/'); #我们可以在字符串前面加个前缀 r ,表示这是一个 raw 字符串,里面的字符就不需要转义了
 
#但是r'...'表示法不能表示多行字符串,也不能表示包含'和 "的字符串
#如果要表示多行字符串,可以用'''...'''表示
print ('''Python is created by "Guido".
It is free and easy to learn.
Let's start learn Python in imooc!''');  #等同于'Line 1\nLine 2\nLine 3'
 
#---------------------------------------------------
#Python在后来添加了对Unicode的支持,以Unicode表示的字符串用u'...'表示,比如:
print u'中文'
 
#如果中文字符串在Python环境下遇到 UnicodeDecodeError,这是因为.py文件保存的格式有问题。可以在第一行添加注释(目的是告诉Python解释器,用UTF-8编码读取源代码。)
# -*- coding: utf-8 -*-  
 
#---------------------------------------------------
#布尔类型
= True 
print and 'a=T' or 'a=F'
#计算结果不是布尔类型,而是字符串 'a=T',这是为什么呢?
#因为Python把0、空字符串''和None看成 False,其他数值和非空字符串都看成 True,所以:
and 'a=T' #计算结果是 'a=T'
print and 'a=T' or 'a=F' #计算结果还是 'a=T'
 
#要解释上述结果,又涉及到 and 和 or 运算的一条重要法则:短路计算。
#1. 在计算 a and b 时,如果 a 是 False,则根据与运算法则,整个结果必定为 False,因此返回 a;如果 a 是 True,则整个计算结果必定取决与 b,因此返回 b。
#2. 在计算 a or b 时,如果 a 是 True,则根据或运算法则,整个计算结果必定为 True,因此返回 a;如果 a 是 False,则整个计算结果必定取决于 b,因此返回 b。
#所以Python解释器在做布尔运算时,只要能提前确定计算结果,它就不会往后算了,直接返回结果。

List和Tuple类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#list是一种有序的集合,可以随时添加和删除其中的元素
 
#一个元素可以没有的list,就是空list:
empty_list = [] 
 
#创建List
= ['Adam'95.5'Lisa'85'Bart'59]
print L
 
#按照索引访问list
print L[4#输出Bart,下标是从0开始
 
#倒序访问list
print L[-2#输出Bart,下标是从0开始
 
#添加新元素
L.append('Paul'
L.insert(0'Paul'#添加到指定位置
 
#从list删除元素
L.pop() #pop()方法总是删掉list的最后一个元素,并且它还返回这个元素
pop(2#删除指定位置元素
 
#替换元素
 L[2= 'Paul' #对list中的某一个索引赋值,就可以直接用新的元素替换掉原来的元素
  
#---------------------------------------------------
#tuple是另一种有序的列表,中文翻译为“ 元组 ”。tuple 和 list 非常类似,但是,tuple一旦创建完毕,就不能修改了。
 
#创建tuple
= ('Adam''Lisa''Bart'#创建tuple和创建list唯一不同之处是用( )替代了[ ]
 
#获取 tuple 元素的方式和 list 是一模一样的
 
#包含 0 个元素的 tuple,也就是空tuple,直接用 ()表示
= () #打印()
 
#创建包含1个元素的 tuple 
= (1,) #打印(1,),加上“,”是因为()既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。
 
#“可变”的tuple
= ('a''b', ['A''B']) #当我们把list的元素'A'和'B'修改为'X'和'Y'后,tuple一开始指向的list并没有改成别的list,所以,tuple所谓的“不变”是说,tuple的每个元素,指向永远不变。

Dict和Set类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#花括号 {} 表示这是一个dict,然后按照 key: value, 写出来即可。最后一个 key: value 的逗号可以省略。由于dict也是集合,len() 函数可以计算任意集合的大小
= {
    'Adam'95,
    'Lisa'85,
    'Bart'59
}
 
#访问dict 
print d['Adam']
#如果key不存在,会直接报错:KeyError。可以先判断一下 key 是否存在再取值
if 'Paul' in d:
    print d['Paul']
#也可以使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None
print d.get('Bart'#59 
print d.get('Paul'#None
 
#dict的特点
#dict的第一个特点是查找速度快,无论dict有10个元素还是10万个元素,查找速度都一样(而list的查找速度随着元素增加而逐渐下降。不过dict的查找速度快不是没有代价的,dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。)
#由于dict是按 key 查找,所以,在一个dict中,key不能重复。
 
#dict的第二个特点就是存储的key-value序对是没有顺序的
#dict的第三个特点是作为 key 的元素必须不可变,Python的基本类型如字符串、整数、浮点数都是不可变的,都可以作为 key。但是list是可变的,就不能作为 key
 
#更新dict
d['Paul'= 72 #如果 key 已经存在,则赋值会用新的 value 替换掉原来的 value
 
#遍历dict
= {
    'Adam'95,
    'Lisa'85,
    'Bart'59
}
for name in d:
    print name,':',d[name]
 
#---------------------------------------------------
#set 持有一系列元素,这一点和 list 很像,但是set的元素没有重复,而且是无序的,这点和 dict 的 key很像。
#创建
= set(['A''B''C'])
 
#访问set
#由于set存储的是无序集合,所以我们没法通过索引来访问。访问 set中的某个元素实际上就是判断一个元素是否在set中。
'Bart' in #返回True/False.(大小写敏感)
 
#set的特点
#set的内部结构和dict很像,唯一区别是不存储value,因此,判断一个元素是否在set中速度很快。
#set存储的元素和dict的key类似,必须是不变对象,因此,任何可变对象是不能放入set中的。
#最后,set存储的元素也是没有顺序的。
 
#遍历set
= set(['Adam''Lisa''Bart'])
for name in s:
    print name
     
#更新set
s.add(4#元素已经存在于set中,add()不会报错,但是不会加进去了
s.remove(4#元素不存在set中,remove()会报错,所以remove()前需要判断。

条件判断和循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#if语句
age = 20
if age >= 118:
    print 'your age is', age
    print 'adult'
else:
    print 'your age is', age 
print 'END'
# Python代码的缩进规则。具有相同缩进的代码被视为代码块
# 缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
 
#if-elif-else
age = 12
if age >= 18:
    print 'adult'
elif age >= 6:
    print 'teenager'
elif age >= 3:
    print 'kid'
else:
    print 'baby'
# 这一系列条件判断会从上到下依次判断,如果某个判断为 True,执行完对应的代码块,后面的条件判断就直接忽略,不再执行了。(和Java一样)
 
#for循环 遍历一个list或tuple
= ['Adam''Lisa''Bart']
for name in L:
    print name
     
#while循环
= 10
= 0
while x < N:
    print x
    = + 1
 
#(都和Java一样用法)
#可以使用break退出循环 
#continue继续循环
#多重循环 
for in ['A''B''C']:
    for in ['1''2''3']:
        print + y

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#可以直接从Python的官方网站查看文档: http://docs.python.org/2/library/functions.html#ab
#调用函数
print abs(-2#2 
 
#编写函数
#在Python中,定义一个函数要使用 def 语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用 return 语句返回。
def my_abs(x):
    if x >= 0:
        return x
    else:
        return -x
#如果没有return语句,函数执行完毕后也会返回结果,只是结果为None。return None可以简写为return。
 
#递归函数
def fact(n):
    if n==1:
        return 1
    return * fact(n - 1)
#分析(很清晰)
===> fact(5)
===5 * fact(4)
===5 * (4 * fact(3))
===5 * (4 * (3 * fact(2)))
===5 * (4 * (3 * (2 * fact(1))))
===5 * (4 * (3 * (2 * 1)))
===5 * (4 * (3 * 2))
===5 * (4 * 6)
===5 * 24
===120
#(扩展)使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,
#栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。可以试试计算 fact(10000)。
 
#定义默认参数 函数的默认参数的作用是简化调用
def power(x, n=2):
    = 1
    while n > 0:
        = - 1
        = * x
    return s
 
print power(5)
#由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:
# OK:
def fn1(a, b=1, c=2):
    pass
# Error:
def fn2(a=1, b):
    pass
     
#定义可变参数
def fn(*args):
    print args
#Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

切片

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#取前3个元素
= ['Adam''Lisa''Bart''Paul']
L[0:3#['Adam', 'Lisa', 'Bart']
L[1:3#['Lisa', 'Bart']
L[:] #表示从头到尾
L[::2#第三个参数表示每N个取一个,L[::2]表示每两个元素取出一个来
 
#倒序切片
= ['Adam''Lisa''Bart''Paul']
L[-2:] #['Bart', 'Paul']
L[:-2#['Adam', 'Lisa']
L[-3:-1#['Lisa', 'Bart'] 倒数第三个开始切到倒数第一个
L[-4:-1:2#['Adam', 'Bart']
 
#tuple和字符切片也是一样的,只是返回的是tuple和字符

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#普通迭代  for ... in完成
 
#索引迭代
= ['Adam''Lisa''Bart''Paul']
for index, name in enumerate(L):
    print index, '-', name
#0 - Adam
#1 - Lisa
#2 - Bart
#3 - Paul
 
#扩展
#实际上,enumerate() 函数把:['Adam', 'Lisa', 'Bart', 'Paul'] 变成了类似: [(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
#因此,迭代的每一个元素实际上是一个tuple:
for in enumerate(L):
    index = t[0]
    name = t[1]
    print index, '-', name
#如果我们知道每个tuple元素都包含两个元素,for循环又可以进一步简写为:
for index, name in enumerate(L):
    print index, '-', name
#这样不但代码更简单,而且还少了两条赋值语句。
 
#迭代dict的value
#dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list
= 'Adam'95'Lisa'85'Bart'59 }
print d.values()
# [85, 95, 59]
for in d.values():
    print v
# 85
# 95
# 59
 
#扩展 
#如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法,迭代效果完全一样:
= 'Adam'95'Lisa'85'Bart'59 }
print d.itervalues()
# <dictionary-valueiterator object at 0x106adbb50>
for in d.itervalues():
    print v
# 85
# 95
# 59
#那这两个方法有何不同之处呢?
#1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
#2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
#3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
#如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
 
#迭代dict的key和value
for key, value in d.items():
    print key, ':', value
 
#Lisa : 85
#Adam : 95
#Bart : 59
# values() 有一个 itervalues() 类似,items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。

列表生成式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],我们可以用range(1, 11):
#但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做
= []
for in range(111):
    L.append(x * x)
#还可以用
[x * for in range(111)] #这种写法就是Python特有的列表生成式。利用列表生成式,可以以非常简洁的代码生成list
 
#条件过滤 如果我们只想要偶数的平方,不改动 range()的情况下,可以加上 if 来筛选:
[x * for in range(111if % 2 == 0#有了 if 条件,只有 if 判断为 True 的时候,才把循环的当前元素添加到列表中。
#[4, 16, 36, 64, 100]
 
#多层表达式
[m + for in 'ABC' for in '123']
#['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
#相当于
= []
for in 'ABC':
    for in '123':
        L.append(m + n)

整理总结参考自:慕课网

Python基础 语法特别注意笔记(和Java相比)的更多相关文章

  1. python基础语法及知识点总结

    本文转载于星过无痕的博客http://www.cnblogs.com/linxiangpeng/p/6403991.html 在此表达对原创作者的感激之情,多谢星过无痕的分享!谢谢! Python学习 ...

  2. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  3. Python 基础语法(四)

    Python 基础语法(四) --------------------------------------------接 Python 基础语法(三)------------------------- ...

  4. Python 基础语法

    Python 基础语法 Python语言与Perl,C和Java等语言有许多相似之处.但是,也存在一些差异. 第一个Python程序 E:\Python>python Python 3.3.5 ...

  5. python学习第四讲,python基础语法之判断语句,循环语句

    目录 python学习第四讲,python基础语法之判断语句,选择语句,循环语句 一丶判断语句 if 1.if 语法 2. if else 语法 3. if 进阶 if elif else 二丶运算符 ...

  6. python学习第三讲,python基础语法之注释,算数运算符,变量.

    目录 python学习第三讲,python基础语法之注释,算数运算符,变量. 一丶python中的基础语法,注释,算数运算符,变量 1.python中的注释 2.python中的运算符. 3.pyth ...

  7. python基础语法、数据结构、字符编码、文件处理 练习题

    考试范围 '''1.python入门:编程语言相关概念2.python基础语法:变量.运算符.流程控制3.数据结构:数字.字符串.列表.元组.字典.集合4.字符编码5.文件处理''' 考试内容 1.简 ...

  8. 【转】Python基础语法

    [转]Python基础语法 学习一门编程语言,通常是学习该语言的以下几个部分的内容: 基础语法:如,变量的声明与调用.基本输出语句.代码块语法.注释等: 数据类型:通常都为 数字.字符串.布尔值.数组 ...

  9. python基础语法(四)

    --------------------------------------------接 Python 基础语法(三)---------------------------------------- ...

随机推荐

  1. 常见压缩格式分析,及 Linux 下的压缩相关指令

    可先浏览加粗部分 一.常见压缩档 *.zip | zip 程式壓縮打包的檔案: (很常见,但是因为不包含文件名编码信息,跨平台可能会乱码) *.rar | winrar 程序压缩打包的档案:(在win ...

  2. Codeforces Round #417 (Div. 2)-A. Sagheer and Crossroad

    [题意概述] 在一个十字路口 ,给定红绿灯的情况, 按逆时针方向一次给出各个路口的左转,直行,右转,以及行人车道,判断汽车是否有可能撞到行人 [题目分析] 需要在逻辑上清晰,只需要把所有情况列出来即可 ...

  3. Go 语言类型转换

    类型转换用于将一种数据类型的变量转换为另外一种类型的变量.Go 语言类型转换基本格式如下: type_name(expression) type_name 为类型,expression 为表达式. 实 ...

  4. PHP date() 函数

    实例 格式化本地日期和时间,并返回格式化的日期字符串: <?php // Prints the dayecho date("l") . "<br>&qu ...

  5. Android中软键盘弹出时底部菜单上移问题

    当在Android的layout设计里面如果输入框过多,则在输入弹出软键盘的时候,下面的输入框会有一部分被软件盘挡住,从而不能获取焦点输入. 解决办法: 方法一:在你的activity中的oncrea ...

  6. ThreadLocal深入剖析

    JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路.使用这个工具类可以很简洁地编写出优美的多线程程序,Threa ...

  7. [boost] Windows下编译

    编译命令 32位 编译 bjam variant=release link=static threading=multi runtime-link=static -a -q bjam variant= ...

  8. [struts2学习笔记] 第三节 创建struts 2 HelloWorld所需的六个步骤

    本文地址:http://blog.csdn.net/sushengmiyan/article/details/40349201 官方文档:http://struts.apache.org/releas ...

  9. antlr v4 使用指南连载2——准备环境

    antlr v4 开发环境         从上一篇文章的例子中可以知道,antlr有一套自己的语法来声明目标语言的语法,因此它本身就需要编译或者使用antlr提供的api来读取这些语法规则,并使之可 ...

  10. Android必知必会-Stetho调试工具

    一.背景 Stetho是 Facebook 出品的一个强大的 Android 调试工具,使用该工具你可以在 Chrome Developer Tools查看APP的布局, 网络请求(仅限使用Volle ...