Python语法基础

设置环境变量

Linux:
$ PATH=$PATH:/usr/local/python3/bin/python3    # 设置环境变量
$ python3 --version
Python 3.4.0

Windows:
set path=%path%;C:\python34

1、在Linux下使用下面的代码可以直接./xxx.py执行脚本,在Windows下不可以:#!/usr/bin/python3

2、执行脚本:$ python3 hello.py

3、字符编码,需要写在文件的开头,比如支持中文编码:
      # -*- coding: UTF-8 -*-  或者 #coding=utf-8,

#coding=utf-8

import json  

student = {}
student['Name'] = '张三'
student['Age'] = 18
student[12] = True

print json.dumps(student, ensure_ascii=False, encoding='utf-8') 

注意:#coding=utf-8 的 = 号两边不要空格,且utf-8必须为小写。

4、关键字:>>> import keyword,>>> keyword.kwlist
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']

5、代码注释:#!/usr/bin/python3,也可以使用''' XXX'''和"""XXX""",即连续的3个单引号或双引号

#单引号注释
#!/usr/bin/python3 
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号 
这是多行注释,用三个单引号
'''
print("Hello, World!") 

#双引号注释
#!/usr/bin/python3 
"""
这是多行注释,用三个单引号
这是多行注释,用三个单引号 
这是多行注释,用三个单引号
"""
print("Hello, World!") 

6、代码块:python最具特色的就是使用缩进来表示代码块,不需要使用大括号({})。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数,缩进不一致,会导致运行错误。

7、多行语句:使用反斜杠(\)来实现多行语句,在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\):

total = item_one + \
        item_two + \
        item_three
在 [], {}, 或 () 中的多行语句,不需要使用反斜杠(\),例如:
total = ['item_one', 'item_two', 'item_three',
        'item_four', 'item_five']

注意!多行的内容都属于同一块,因此缩进一定要一致。

8、数据类型:python中数有四种类型:整数、长整数、浮点数和复数。
整数, 如 1
长整数 是比较大的整数
浮点数 如 1.23、3E-2
复数 如 1 + 2j、 1.1 + 2.2j

9、字符串:python中单引号和双引号使用完全相同。使用三引号('''或""")可以指定一个多行字符串。
转义符 '\'自然字符串, 通过在字符串前加r或R。 如 r"this is a line with \n" 则\n会显示,并不是换行。
python允许处理unicode字符串,加前缀u或U, 如 u"this is an unicode string"。
字符串是不可变的。按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
word = '字符串'
sentence = "这是一个句子。"
paragraph = """这是一个段落,
可以由多行组成"""

10、代码组:

if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

11、换行输出:print("xxx"),
不换行输出:print( x, end=" " )或
print( y, end="END" )
print(a, b, c, d, e, sep='+'),输出abcde并使用+号连接。

12、导入模块:

将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为: from somemodule import *

13、help() 函数:调用 python 的 help() 函数可以打印输出一个函数的文档字符串,按下 : q 两个按键即退出说明文档

14、多个变量同时赋值:a, b, c = 1, 2, "runoob"

15、Python3 中有六个标准的数据类型:
        Number(数字)
        String(字符串)
        List(列表)
        Tuple(元组)
        Sets(集合)
        Dictionary(字典)

16、Python3 支持 int、float、bool、complex。内置的 type() 函数可以用来查询变量所指的对象类型:

type()来判断数据的类型:
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
可以用 isinstance 来判断:
>>>a = 111
>>> isinstance(a, int)
True
>>>
isinstance 和 type 的区别在于:
class A:
    pass

class B(A):
    pass

isinstance(A(), A)  # returns True
type(A()) == A      # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False
区别就是:
type()不会认为子类是一种父类类型。
isinstance()会认为子类是一种父类类型。

17、字符串:Python中的字符串用单引号(')或双引号(")括起来,同时使用反斜杠(\)转义特殊字符:

str = 'Runoob'
print (str)          # 输出字符串
print (str[0:-1])    # 输出第一个到倒数第二个的所有字符
print (str[0])       # 输出字符串第一个字符
print (str[2:5])     # 输出从第三个开始到第五个的字符
print (str[2:])      # 输出从第三个开始的后的所有字符
print (str * 2)      # 输出字符串两次
print (str + "TEST") # 连接字符串

字符串的这种输出方式同样适用于列表等其他集合数据类型。与 C 字符串不同的是,Python 字符串不能被改变。向一个索引位置赋值,比如word[0] = 'm'会导致错误。

18、列表:列表支持使用不同的数据类型组成同一个列表:

#!/usr/bin/python3
 
list = [ 'abcd', 786 , 2.23, 'runoob', 70.2 ]
tinylist = [123, 'runoob']
 
print (list)            # 输出完整列表
print (list[0])         # 输出列表第一个元素
print (list[1:3])       # 从第二个开始输出到第三个元素
print (list[2:])        # 输出从第三个元素开始的所有元素
print (tinylist * 2)    # 输出两次列表
print (list + tinylist) # 连接列表

与Python字符串不一样的是,列表中的元素是可以改变的:

19、元组:元组与列表类似,不同之处在于元组的元素不能修改:

#!/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) # 连接元组

20、集合:是一个无序不重复元素的序列:

#!/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中不同时存在的元素

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

21、字典:是通过key-value来存取数据:

#!/usr/bin/python3
 
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2]     = "2 - 菜鸟工具"
 
tinydict = {'name': 'runoob','code':1, 'site': 'www.runoob.com'}
 
 
print (dict['one'])       # 输出键为 'one' 的值
print (dict[2])           # 输出键为 2 的值
print (tinydict)          # 输出完整的字典
print (tinydict.keys())   # 输出所有键
print (tinydict.values()) # 输出所有值

输出结果:

1 - 菜鸟教程
2 - 菜鸟工具
{'name': 'runoob', 'site': 'www.runoob.com', 'code': 1}
dict_keys(['name', 'site', 'code'])
dict_values(['runoob', 'www.runoob.com', 1])

注意:

1、字典是一种映射类型,它的元素是键值对。

2、字典的关键字必须为不可变类型,且不能重复。

3、创建空字典使用 { }

4、不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住

5、键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行

字典是支持无限极嵌套的,如下面代码:

citys={
    '北京':{
        '朝阳':['国贸','CBD','天阶','我爱我家','链接地产'],
        '海淀':['圆明园','苏州街','中关村','北京大学'],
        '昌平':['沙河','南口','小汤山',],
        '怀柔':['桃花','梅花','大山'],
        '密云':['密云A','密云B','密云C']
    },
    '河北':{
        '石家庄':['石家庄A','石家庄B','石家庄C','石家庄D','石家庄E'],
        '张家口':['张家口A','张家口B','张家口C'],
        '承德':['承德A','承德B','承德C','承德D']
    }
}

可以使用如下方法进行列出:

for i in citys['北京']:
    print(i)

将列出如下结果:

朝阳
海淀
昌平
怀柔
密云
for i in citys['北京']['海淀']:
    print(i)

输出如下结果:

圆明园
苏州街
中关村
北京大学

22、数据类型转换:

int(x [,base])将x转换为一个整数
float(x)将x转换到一个浮点数
complex(real [,imag])创建一个复数
str(x)将对象 x 转换为字符串
repr(x)将对象 x 转换为表达式字符串
eval(str)用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s)将序列 s 转换为一个元组
list(s)将序列 s 转换为一个列表
set(s)转换为可变集合
dict(d)创建一个字典。d 必须是一个序列 (key,value)元组。
frozenset(s)转换为不可变集合
chr(x)将一个整数转换为一个字符
ord(x)将一个字符转换为它的整数值
hex(x)将一个整数转换为一个十六进制字符串
oct(x)将一个整数转换为一个八进制字符串

23、python 使用 lambda 来创建匿名函数。

所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
  • 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
#!/usr/bin/python3
 
# 可写函数说明
sum = lambda arg1, arg2: arg1 + arg2;
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

24、Python作用域:
Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这这些语句内定义的变量,外部也可以访问,如下代码:

>>> def test():
...     msg_inner = 'I am from Runoob'

>>> if True:
...  msg = 'I am from Runoob'
... 
>>> msg
'I am from Runoob'
>>>

在if中定义的变量msg可以在外部继续访问,而定义在函数test()内的msg_inner变量只能在函数内访问。

25、遍历字典和列表

#字典遍历
knights = {'gallahad': 'the pure', 'robin': 'the brave'}
#遍历keys
for a in knights.keys():
	print(a)
#遍历values
for a in knights.values():
	print(a)
#同时遍历keys和values
for k, v in knights.items():
	print(k, v, sep=':')
	
#列表遍历
mylst = ['tic', 'tac', 'toe']
for a in mylst :
	print(a)
#遍历列表和索引
for i, v in enumerate(mylst):
	print(i, v, sep=':')
#反向遍历列表
for v in reversed(mylst):
	print(v)
#遍历排序后的列表
for v in sorted(mylst):
	print(v)

26、文件读写

cities = {
	'北京':{
		'海淀区',
		'朝阳区'
	},
	'广州':{
		'番禺区',
		'海珠区'
	}
}

# 打开一个文件
f = open("temp.txt", "w")
s = str(cities)

#写入数据到文件
f.write(s)

# 关闭打开的文件
f.close()

#打开读取文件
f2 = open("temp.txt", "r")

#读取全部行
print(f2.readlines())

#关闭读取文件
f2.close()

27、对象序列化和反序列化

#对象序列化
import pickle

# 使用pickle模块将数据对象保存到文件
data1 = {'a': [1, 2.0, 3, 4+6j],
         'b': ('string', u'Unicode string'),
         'c': None}

selfref_list = [1, 2, 3]

output = open('data.pkl', 'wb')

# Pickle dictionary using protocol 0.
pickle.dump(data1, output)

# Pickle the list using the highest protocol available.
pickle.dump(selfref_list, output, -1)

output.close()


#对象反序列化,使用pprint和print好像一样?
import pprint, pickle

#使用pickle模块从文件中重构python对象
pkl_file = open('data.pkl', 'rb')

data1 = pickle.load(pkl_file)
pprint.pprint(data1)
print(data1)

data2 = pickle.load(pkl_file)
pprint.pprint(data2)
print(data2)

pkl_file.close()

28、异常处理try..exception..finally

import sys

#自定义异常处理类
class MyError(Exception):
	def __init__(self, value):
		self.value = value
	def __str__(self):
		return repr(self.value)
			
#产生异常的除法函数
def DivNum(x, y):
	if y == 0:
		raise NameError('除数不能为零') #除数为零抛出异常
	elif y < 0:
		raise MyError("除数不能小于零")
	else:
		return x / y;

try:
	f = DivNum(10, -1)
	print(f)
except NameError as err:
	print("OS error: {0}".format(err))
except ValueError:
    print("Could not convert data to an integer.")
except:  #或者使用else:
	print("Unexpected error:", sys.exc_info()[0], sys.exc_info()[1])
finally: #最后都会执行的代码
	print("到此一游!")
	
#除了可以使用finally进行异常清理
#还可以使用with语句进行预处理清理
with open("myfile.txt") as f:
    for line in f:
        print(line, end="")
		

29、类的定义和使用

#类定义
class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问,使用两根下划线
    __weight = 0
    #定义构造方法
    def __init__(self,n,a,w):
        self.name = n
        self.age = a
        self.__weight = w
    def speak(self):
        print("%s 说: 我 %d 岁。" %(self.name,self.age))
 
#单继承示例
class student(people):
    grade = ''
    def __init__(self,n,a,w,g):
        #调用父类的构函
        people.__init__(self,n,a,w)
        self.grade = g
    #覆写父类的方法
    def speak(self):
        print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
 
#另一个类,多重继承之前的准备
class speaker():
    topic = ''
    name = ''
    def __init__(self,n,t):
        self.name = n
        self.topic = t
    def speak(self):
        print("我叫 %s,我是一个演说家,我演讲的主题是 %s"%(self.name,self.topic))
 
#多重继承
class sample(speaker,student):
    a =''
    def __init__(self,n,a,w,g,t):
        student.__init__(self,n,a,w,g)
        speaker.__init__(self,n,t)
    def __add(self):  #类的私有方法和私有变量一样使用两根下划线命名
        print("add")
 
test = sample("Tim",25,80,4,"Python")
test.speak()   #方法名同,默认调用的是在括号中排前地父类的方法
#test.__add()  #类的私有方法不能在类的外部调用

30、类的专有方法和运算符重载,参考:http://www.jb51.net/article/59691.htm

__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__str__:打印类自身
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__div__: 除运算
__mod__: 求余运算
__pow__: 乘方


#重载操作符相当于重写上面的专有方法
class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b
 
   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)
   
   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)
 
v1 = Vector(2,10)
v2 = Vector(5,-2)
print (v1 + v2)

 

 

转载于:https://my.oschina.net/u/3489228/blog/1603483

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值