我在学校里学习的是C、C++、C#,实习的时候公司里用的都是Java,于是又自学了java。用我领导的一句话说,“C++转Java几天时间就够了”。最近在学习深度学习算法和自然语言处理的时候,很多算法都是用python写的,于是又下定决定学习了python。用了一下午就基本学会了,以下是菜鸟教程的链接。
Python2:http://www.runoob.com/python/python-tutorial.html
Python3:http://www.runoob.com/python3/python3-tutorial.html
为什么给两套教程呢,有句话是这么说的,“Java只有一种,而Python语言有两种,2和3“。Python 3.0在设计的时候为了不带入过多的累赘,和Python2在一些方面有一些不同,下面也会详细说明。
有了C++/Java基础的学习python还是很快的,我在看教程的时候很多东西都是跳过不看的,因为它和其他语言里的都一样。为了减少看那些冗余内容的时间,特此整理一下python和C++/Java在编码方面不一样的地方,方便自学python的人更快的学习。
文末有python及其IDE资源哦。
一、 基础语法
1、缩进
python与C++/Java最大的不同就是使用缩进来表示代码块,而不使用大括号({})。Python中一个模块的界限,是由这行前面有多少空格决定的,而C和Java用的是大括号{}。比如以下程序:
if True:
#可以在同一行中使用多条语句,语句之间使用分号(;)分割。
print ("True");print ("True")
else:
print ("False")
那如果这行代码比较长,一行放不下怎么办?我们可以使用反斜杠(\)来实现
total = item_one + \
item_two + \
item_three
python的空行没有任何作用,加了也不会报错,用适当的空行隔开模块可以让你的代码层次更加清晰明了。
2、注释
Python中单行注释以 # 开头,多行注释使用三个单引号(”’)或三个双引号(“”“)。例如:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:test.py
# 第一个注释
print ("Hello, Python!") # 第二个注释
'''
这是多行注释,使用单引号。
这是多行注释,使用单引号。
'''
"""
这是多行注释,使用双引号。
这是多行注释,使用双引号。
"""
二、 数据类型
1、变量的声明
在Python中定义变量的时候,不需要声明其数据类型,但是必须赋值,在赋值的时候会给它分配相应的数据类型。例如:
counter = 100 # 整型变量
miles = 1000.0 # 浮点型变量
name = "abcdefg" # 字符串
print (counter)
print (miles)
print (name)
在 Python 中,变量就是变量,它没有类型,我们所说的”类型”是变量所指的内存中对象的类型,变量只是对它的引用,可以用del counter删除。
这里插一句,Python2和Python3的print有较大不同,而且print 默认输出是换行的。
print counter #这是Python2
print (counter) #这是Python3
#如果要实现不换行:
print counter , #Python2:在变量末尾加上逗号
print (counter,end=" ")#Python3:在变量末尾加上 end=""
2、数据类型
Python3 中有六个标准的数据类型:Number(数字)String(字符串)List(列表)Tuple(元组)Set(集合)Dictionary(字典)。
Python中没有char,单字符也按字符串处理。
Python2没有Set(集合)。
(1)Number
int、float、bool、complex(复数)。
在Python 3里,只有一种整数类型 int,表示为长整型,没有 python2 中的 Long。
在 Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,可以和数字相加。
(2)String:
Python中的字符串用单引号(‘)或双引号(“)括起来,同时使用反斜杠(\)转义特殊字符。
字符串的截取的语法格式如下:变量[头下标,尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。
加号 (+) 表示连接字符串, 星号 (*) 表示复制当前字符串,紧跟的数字为复制的次数。实例如下:
str = 'abcdef'
print (str) # 输出字符串
print (str[0:-1]) # 输出第一个到倒数第二个的所有字符
print (str[0]) # 输出字符串第一个字符
print (str[2:5]) # 输出从第三个开始到第五个的字符
print (str[2:]) # 输出从第三个开始的后的所有字符
print (str * 2) # 输出字符串两次
print (str + "ghi") # 连接字符串
执行以上程序会输出如下结果:
abcdef
abcde
a
cde
cdef
abcdefabcdef
abcdefghi
(3)List(列表)
列表是Python 中使用最频繁的数据类型,和Java中的List比较像。
但是Python的列表中的元素可以是不同类型,比如数字,字符串甚至可以包含列表。
列表是写在方括号([])之间、用逗号分隔开的元素列表。
和字符串一样,列表同样可以被索引和截取
#!/usr/bin/python3
list = [ 'abcd', 123 , 4.56, 'efghij', 78.9 ]
tinylist = [123, 'efghij']
print (list) # 输出完整列表
print (list[0]) # 输出列表第一个元素
print (list[1:3]) # 从第二个开始输出到第三个元素
print (list[2:]) # 输出从第三个元素开始的所有元素
print (tinylist * 2) # 输出两次列表
print (list + tinylist) # 连接列表
输出结果:
['abcd', 123, 4.56, 'efghij', 78.9]
abcd
[123, 4.56]
[4.56, 'efghij', 78.9]
[123, 'efghij', 123, 'efghij']
['abcd', 123, 4.56, 'efghij', 78.9, 123, 'efghij']
(4)元组:
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。
#!/usr/bin/python3
tuple = ( 'abcd', 786 , 2.23, 'runoob', 70.2 )
tinytuple = (123, 'runoob')
print (tuple) # 输出完整元组
print (tuple[0]) # 输出元组的第一个元素
print (tuple[1:3]) # 输出从第二个元素开始到第三个元素
print (tuple[2:]) # 输出从第三个元素开始的所有元素
print (tinytuple * 2) # 输出两次元组
print (tuple + tinytuple) # 连接元组
输出结果:
('abcd', 786, 2.23, 'runoob', 70.2)
abcd
(786, 2.23)
(2.23, 'runoob', 70.2)
(123, 'runoob', 123, 'runoob')
('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')
(5)集合(set)
集合(set)是一个无序不重复元素的序列,和java里的set一样。
基本功能是进行成员关系测试和删除重复元素。
可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。
#!/usr/bin/python3
student = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'}
print(student) # 输出集合,重复的元素被自动去掉
# 成员测试
if('Rose' in student) :
print('Rose 在集合中')
else :
print('Rose 不在集合中')
# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')
print(a)
print(a - b) # a和b的差集
print(a | b) # a和b的并集
print(a & b) # a和b的交集
print(a ^ b) # a和b中不同时存在的元素
输出结果:
{'Mary', 'Jim', 'Rose', 'Jack', 'Tom'}
Rose 在集合中
{'b', 'a', 'c', 'r', 'd'}
{'b', 'd', 'r'}
{'l', 'r', 'a', 'c', 'z', 'm', 'b', 'd'}
{'a', 'c'}
{'l', 'r', 'z', 'm', 'b', 'd'}
注:python2中没有set
(6)Dictionary(字典)
Python中的字典(dictionary)相当于Java中的Map,用”{ }”创建,是一个无序的键(key) : 值(value)对集合。
键(key)必须使用不可变类型,且在同一个字典中,键必须是唯一的。
dict = {}
dict['one'] = "1 - ABCD"
dict['one'] = "1 - abcd" #相当于java中Map的put,可以通过赋值添加或修改字典元素
dict[2] = "2 - efgh"
tinydict = {'name': 'Tom','age':18}
print (dict['one']) # 输出键为 'one' 的值
print (dict[2]) # 输出键为 2 的值
print (tinydict) # 输出完整的字典
print (tinydict.keys()) # 输出所有键
print (tinydict.values()) # 输出所有值
输出结果:
1 - abcd
2 - efgh
{'name': 'Tom', 'age': 18}
dict_keys(['name', 'age'])
dict_values(['Tom', 18])
(7)数据类型转换
直接将数据类型作为函数名即可,十分方便。如:
a=”12345”
b=int(a)
print (b)
(8)总结
数据类型 分为数字型和非数字型。
数字型包括整型,长整型,浮点型,复数型;
非数字型包括字符串,列表,元组和字典 ;
列表用 “[ ]” 标识类似 C 语言中的数组;
元组用 “( )” 标识。内部元素用逗号隔开。但是元组不能二次赋值,相当于只读列表;
字典用 “{ }” 标识。字典由索引 key 和它对应的值 value 组成,相当于Java里的Map。
非数字型的共同点:都可以使用切片、链接(+)、重复(*)、取值(a[])等相关运算;
非数字型的不同点:列表 可以直接赋值,元组不可以赋值,字典按照 dict[k]=v 的方式赋值。
三、运算符
1、算数运算符
Python和Java都有:
+-*/(加减乘除)%(取模)
Python新加:
**(幂)//(取整除)
注:Python2中除法(/)和java,C++中一样,整数/整数=整数
Python3中除法(/)总是返回一个浮点数,要获取整数使用(//)操作符
print (2/4) # 除法,得到一个浮点数(Python3)
0.5
print (2//4) # 除法,得到一个整数
0
2、比较运算符
Python和Java都有:
==(等于)!=(不等于)>(大于)<(小于)>=(大于等于)<=(小于等于)
注:Python2中有<>(不等于),Python3中没有
3、赋值运算符
Python和Java都有:
=(赋值)+=(加法赋值)-=(减法赋值)*=(乘法赋值)/=(除法赋值)%=(取模赋值)
Python新加:
**=(幂赋值)//=(取整除赋值)
Python移除:
++(自增运算符)—(自减运算符)
4、位运算符
Python和Java都有:
&(按位与)|(按位或)^(按位异或)~(按位取反)<<(左移)>>(右移)
5、逻辑运算符
Python自成一体:
and(布尔与)or(布尔或)not(布尔非)
6、成员运算符
Python自成一体:
in(如果在指定的序列中找到值返回 True,否则返回 False)
not in(如果在指定的序列中没有找到值返回 True,否则返回 False)
7、身份运算符
Python自成一体:
is (判断两个标识符是不是引用自一个对象)
is not (是判断两个标识符是不是引用自不同对象)
注:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
8、优先级
与Java基本相同:
[幂]>[按位取反]>[*,/,%,//]>[+ -]>[>>,<<]>[&]>[\^,|]>[<=,<,>,>=]>[<>,==,!=]>[赋值运算符]>[身份运算符]>[成员运算符]>[逻辑运算符]
未完待续…
python官网下载:https://www.python.org/
我用的编译器是eclipse+pydev
eclipse官网下载:https://www.eclipse.org/downloads/
eclipse+pydev环境搭建教程:http://jingyan.baidu.com/article/cd4c2979101f02756f6e6064.html