本文是回过头来对python中基本语言语义的一个总结。
目录
数值类型
Python的主要数值类型是int和float。int可以存储任意(泛指)大的数:
示例:
ival = 17239871
print(ival**6)
#输出: 26254519291092456596965462913230729701102721
字符串类型
对于字符串,既可以用单引号又可以用双引号 。 对于带有换行符的多行字符串,可以使用三重引号(即''' 或""") 。
示例:
c = """
This is a longer string that
spans multiple lines
"""
print(c)
This is a longer string that
spans multiple lines
示例2:
注意: python 的字符串是不可变的,要修改字符串只能创建一个新的
a = 'this is a string'
# a[10] = 'f' # 此会 报错 # TypeError: 'str' object does not support item assignment
b = a.replace('string', 'longer string') # 字符串的replace函数返回替换后的结果。注意由此也可以推断,replace函数并不会改变原对象,因为字符串并不可改变
print(b)
输出: this is a longer string
注意: 反斜杠(\) 是转义符(escape character),也就是说,它可以用于指定特殊字符(比如新行\n或unicode 字符)。要编写带有反斜杠的字符串字面量,也需要对其进行转义
s='12\\34' # 带有反斜杠进行转义
print s
c='12\n34'
print c
print("***"*13)
# 注意 如果字符串带有很多反斜杠且没有特殊字符,则可以在字符串最左边引号的前面加上 r ,它表示所有字符应该按照原本的样子进行解释
s=r'this\has\no\special\characters'
print(s) # 注意输出时,带着\
输出:
12\34
12
34
***************************************
this\has\no\special\characters
布尔型
即真假类型,可以与1,0相互转换。
print(bool([]), bool([1, 2, 3])) # 此[] 没有加list
print(bool(list([])), bool([1, 2, 3])) # 此 [] 外面加了一个list, 注意,主要【】里面为空,无论加没有都是非真
print(bool('Hello world!'), bool(''))
print(bool(0), bool(1)) # bool(0) 为false
输出:
(False, True)
(False, True)
(True, False)
(False, True)
标量类型
Python的标准库中有一些内建的类型,用于处理数值数据、字符串、布尔值,和日期时间。这些单值类型被称为标量类型。
类型转换
s = '3.14159'
fval = float(s)
print(type(fval))
print(int(fval))
print(bool(fval))
print(bool(0))
输出:
<type 'float'>
3
True
False
二元运算符和比较运算符
基于python2.7的语法
可变和不可变对象
Python中的大多数对象,比如列表、字典、NumPy数组,和用户定义的类型(类),都是可变的。意味着这些对象或包含的值可以被修改:而字符串和元组则是不可变的。注意元组的不可变只是里面元素的引用不可变。但如果元组的元素是一个可变的引用对象时,如list,则这个list里本身是可变的
# 元组不可变
a_tuple=(3,4,[4,5])
# a_tuple[1]='four' # 此会报错,元素的元组不可变 # TypeError: 'tuple' object does not support item assignment
a_tuple[2].append('inlist')
print(a_tuple) # 这个是可变的 (3, 4, [4, 5, 'inlist'])
输出:(3, 4, [4, 5, 'inlist'])
None空值类型
None 是Python 的空值类型,如果一个函数没有显示的返回值,则隐式返回 None.
a=[]
print(bool(a))
print(a is None) # 注意 [] 虽然非真,为假,但并非为None 空值
输出:False False
日期和时间
from datetime import datetime, date, time
dt = datetime(2011, 10, 29, 20, 30, 21)
print(dt.day)
print(dt.minute)
29
30
print(dt.date())
print(dt.time())
print(dt.strftime('%m/%d/%Y %H:%M'))
输出:
2011-10-29
20:30:21
10/29/2011 20:30
万物皆对象
python语言的一个重要特点就是其对象模型的一致性。 无论是变量还是函数,都是对象。
函数调用和对象方法调用
result = f(x, y, z)
g()
obj.some_method(x,y,z)
result=f(a,b,c,d=5,e='foo')
变量和按引用传递
在python 中 对变量赋值时,其实是在创建一个等号右侧对象的一个引用 .
当将对象以参数的形式传入函数时,其实也是传的引用,不会发生任何复制,因此,python函数 被称为是按引用传递的。
a=[1,2,3]
# 加入将a 赋值给一个新变量b
b=a
a.append(4)
print(a)
print(b) # 注意 发现b即使没有没显示变化,但是b 也随着a 改变了。也是输出[1,2,3,4] . 这是因为在python中,用a 对b赋值时,传给b的是a 的引用,a 和 b 都指向同一个对象。
注意 发现b即使没有没显示变化,但是b 也随着a 改变了。也是输出[1,2,3,4] . 这是因为在python中,用a 对b赋值时,传给b的是a 的引用,a 和 b 都指向同一个对象。
输出: [1, 2, 3, 4] [1, 2, 3, 4]
def append_element(somelist,element):
somelist.append(element)
# 注意此处并没有返回值
data=[1,2,3]
append_element(data,4) #
print(data) # 注意data已经被改变了,虽然data并没有被显示返回和复制,但是由于参数传的是引用,在函数中做了改变,所以其全局也改变了
[1, 2, 3, 4]
属性和方法
要一个对象实现了 迭代器协议,就可以确认它是可迭代的。对于大部分对象而言,这就意味着它拥有一个iter魔术方法。一个更好的验证方法就是尝试使用iter函数
# 迭代类型
def isiterable(obj):
try:
iter(obj)
return True
except TypeError: # 不可迭代
return False
print(isiterable(5))
print(isiterable([1,2,3]))
输出: False True
引入其他文件的函数
在python 中,模块module 就是一个含有函数和变量定义以及从其他.py文件引入的此类东西.py文件。
st="""
PI = 3.14159
def f(x):
return x + 2
def g(a, b):
return a + b
"""
with open('./some_module.py','w') as f :
f.write(st)
同目录下调用:
import some_module
result = some_module.f(5)
pi = some_module.PI
print(result,pi)
输出
8.14159