()
既可以表示tuple,又可以作为括号表示运算时的优先级,结果 (1) 被Python解释器计算出结果 1,导致我们得到的不是tuple,而是整数 1。缩进请严格按照Python的习惯写法:4个空格,不要使用Tab,更不要混合Tab和空格,否则很容易造成因为缩进引起的语法错误。
注意: if 语句后接表达式,然后用:
表示代码块开始。【!!!!!!!!!!!】
print name
for x in [1,2,3,4,5,6,7,8,9]: # 十位数字
for y in [0,1,2,3,4,5,6,7,8,9]: # 个位数字
if x < y:
print(x*10+y) #十位数字乘以10加上个位
d = {
# 定义一个 dict
'Adam':95,
'Lisa':85,
'Bart':59,
'Paul':75
}
print(len(d))
95: 'Adam',
85: 'Lisa',
59: 'Bart'
}
d[72] = 'Paul'
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
for key in d:
#print(key+':')+str(d.get(key))
print key,':',d[key]
s = set(['adam','bart','Paul'])
print 'adam' in s
print 'bart' in s
s = set(['Adam', 'Lisa', 'Paul'])
L = ['Adam', 'Lisa', 'Bart', 'Paul']
for element in L:
if element in s:
s.remove(element)
else:
s.add(element)
print s
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk1KOG1saG5IV3JMRU9WQlhQd2tnZXlPNXppYm81dWtlUzI3aWNqS0FoQWhRbHdFZ2Iza2EwbTNXazF5Zk9uSktSU3NPZ0NZQkZCSHNwLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk1PeklrZmhPd2NWaWNkOXJUSlJObFBIQko1bXRRQVJNUWt3d3JmcjhNTEY5UXdDMUY4ZVJYT2JBZEo1WTZMaWIyUHZHUWFMNzM0MGlhaWMvMA%3D%3D.jpg?w=700&webp=1)
if n == 1:
print a,' --> ',c
return
#print a,' --> ',b
move(n-1,a,c,b)
move(1,a,b,c)
move(n-1,b,a,c)
move(4,'A', 'B', 'C')
#move(19,'A', 'B', 'C')
利用倒序切片对 1 - 100 的数列取出:
* 最后10个数;
* 最后10个5的倍数。
print L[-10:]
print L[-46::5]
return s[:1].upper()+s[1:]
print firstCharUpper('hello')
print firstCharUpper('sunday')
print firstCharUpper('september')
for index, name in enumerate(L):
print index, '-', name
for t in enumerate(L):
index = t[0]
name = t[1]
print index, '-', name
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkpGNjZ6YmtBSHBNZVN4eHVmeTVkZ0xpY3FtOTNGeXhLQXdWMG9EU0dyYUJRdlZ2RFhUeUZWaWN3RmVUY0k0S2liOUJvWTdXZmNpYkhZdFUvMA%3D%3D.jpg?w=700&webp=1)
for t in enumerate(zip(range(1,5),L)):
print t[1][0],'-',t[1][1]
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkZmR0sxM1BRRGlhT1JRVXZpY2pac1pQclJ4aDZmQzFtZEtnR2ljQVZpYzhpYTFyZGFzOW12dkJnaWFURURuUFpWODU2NEQ4Z3dvREE5ZEhhcy8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UklWeU9mdXV6aDRVOWliRUNBa05pYldkZlMyeDhvME5BSE1yUVVpY0NYc1AzYng4MTlXWlZwNHFDTzQ5a09CRFE3cmhQOGxjVVhpYmQ4QmovMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk83Y21VYjlPaWFSVUdldTdJUnlKZVE1TlIxemliRGdQUTBjdkJrN3pYcDdIQTN6ZzdIWHk0ckozMmJQNFZqdEd2RWp0Z2hOcGlidFZVMi8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkZKR3YzQ3VTUmdQSGpPQll2M1pzN3hkc2xJeTluTHlGRGliNnNQMFV0bWJGWldpYUVSUW5XU3JFYjA0RGRvVUZ0ZnA5YXlUMUo0QXZYLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkhQRGNqWU9pYjJranVtQW5ab0hac0VPM2hpYzc0Yndzc29qb09nbHppY3RNd3lpY3REZms3NGxIR240N2RaTFpYTzJlV2hYZllpY2pHOHg4LzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Ukl1cERITlpFRFdoQm5pYlhNeTEwZ1g1RmcyNzRmNTkzNkFFSUFoaDlpYkJLTTdhTEdGbG15Mk1FM1hlSzA1Y2txaWFuUHV4ckJzYXVpYTQvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UklmMjQ2dXo2cFFpYXg3cVpKNkNXaFVDZ1pzcG9jWkxsNGs2OG1ZMWhLVjEzS25GTDM2QVd5ZkQ3a2FBYk54UDE2SHdBSFI1OFYwaWFxLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Ukl4ZjNJVGliV09jYjVLWnRmWkZqczB4bGt2NGx0WjdXMGpiSDJwWTJpYkdPcVhFNmljdEk0cm9JajF6YTVpY3JkZHRUdUpKVGtCWG1kYnkvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkRMaGVzNWdJOHRHUEtoSUdaMndnSk5nVmFYakRYMUtQNVBXMENYcTJhQnl4NWU1UmFmQ1lubGxjRUwwSER0aWFxMWJrSlVPRXIzUGUvMA%3D%3D.jpg?w=700&webp=1)
return f(a)+f(c)
print(add(-1,-24,abs))
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UktlcGQ2cWRPU3lXbXoyMHpQaWFCck1BbEh6QjJlSVZPSGlhQ1BTWkhvUERQdTBiZHVCeVhaaWFpY3JsNWlhVXJPRGIwRnRaMjVOaWIxZjdRZi8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UlBPOGlhd05LRXZrUW5ackVjVGtXTFRmWUk0RE1rR29pYm1RU3piOWZURTh2VkFMaWMyRXZMbDB0R1BVYXdpYW1OSjRydzhnMVVJNE9pYWljeC8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkJxYkMwZU0wdlVCSUZHY1hrRGw2VG5YeXBpY1ZkV3hkeEJLVmNCMnlpY1dLeHdZUnR2cGlhQlppY1ZGMG5jYm94U0RmcUpWUFhqbzlTdUcvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkZadG5HaWJJWTlwNEV0YnY5a01GRktpYzk1TGFHZXNZaWJvN21FMUhITEE2eGhUZzdlV0RkeFd4NnVkaWFHUkgzNE9LcGliUlBmRHdwb0NpYy8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkJ0V0JIcTVDUGtsNGljb2xNeFpCTE5rOWw5aDBqdjBYWjdidEVmVEd3eklxVlphM2NaallMaWJRU2pVNWtLclF3aEE5aWJtYmlhSXYwVUcvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkNzQXJSYkNhaWNzaWM3Y3A0czNXM2RpYjJkc3IxVk5IZnF5cVpLaWE4TlVFaWM5bE5wRldmaWFhYUR1ZlgzNmVYY3ppYTB0Y3Q3RjVRNWxzOFYvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UklmMjQ2dXo2cFFpYUpTWmljaFZIQTV0d0k2YXpNSUc3bUhRbldqQXdyYmVqMllRQk1yV2p0aGpVWWlhVllVNktpYnJRbW41MWxTUTg2Z0EvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkRkeTM4NW1aM2VxZ2libWt6dlNSUVkzMzJvUUZoZ1hsbUVzRU1tV0FvSEpDVmJPdHdoSE9RbXRwTlhpYTNrc2FCaWFxenRpY25wOExrTzgvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkkyNmdnNXRGMTBpYWRPTGhxV0ZQNkdCaDZVZlNySXNxNWVGdTdTSGVLTUFDbWg5TGNpYzlJQlphcTRWZGx0aEd3VEFDbm1DS0xPT0xELzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkdqRXJpYlM2OU1TV2lhaER1TVlQczVTWEJEOUtiSWRTRWI0d3VZQURSZ2J1aGlhdDdJVVNaa0FHazdTc0RvTHYwMzNtMHdWTDR4MEhmSi8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk9PTndFVzV0NWhZTkZHaGdUVGljT2R2RklGWHRhNEtJVHVYVnRyMjFkOHN1OWFadFA4c1MwbVdGTEoxdnBIM2liYkNUbTF1Zm9TNGtTLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk5pYWtpY1BWMVd2cmt5NDRLbG1IWkxDbGpNQkFXZVE5b3l2cUM4bEk4dkRhT2dsMDdsTkQ2UFQ4eXlUR0dyVVFPOFZlbWFRb1NzUWFCLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk1sdnVEQzlpYUo5ZUNoZ2FEdFhLQUZkSGlhclFyRWlhaWJOT3FuWjFqZ0NIVGRLcTI4cEc0WDRhaWFPb0F1RVJZN0V2SFJpY3dFbjdaU3BleC8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkRZNDdpYnI3Z283R3p6WFVlbUcwZkRnS2FXTmVmS1lpYmZSSXBETmlicGlhNGVjaWJRbDFtRUN1RDNVNzBkRGRNeHBJcVJuYnJxMmRia3dILzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkZreXhvYjd1YjhpYUNZbHlPRDdwSG5SUGliaWFNbWtobWliVTk5RzRWNDVwNnhwclB6SVJsSHVuanZ3ZXFpY2dyQmFQYTIzWVJOZURaNU81LzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Ukt3WGlhSG9oUFFiZ21LV0JpY1F0aHBhdURwSlB6ZnZNYUg2T0dvZEdTdzlwOEo4YWdEemZCNWljSnlZc0Ewem9QTThEaENFOGhFeENhWS8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkRjQnFIZVM2WTBXR2licHJzV2pubHFCdk5YbVV1blRYTThKSzFtOU9xaEM2UmlhT2taUkM0MGYzNDkzQzFzcU1HQjlFaWJseXNHbkJOWS8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkNpY0czaWM1UEZmUHdmRjN2elBqUmxQRmhPTUo2NnMzZkpCbzVERW8wMHo0Nk83VHg5dmlhUmxxTkt4WUk2WllLbjhxalJwV2Q4RnJMWC8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk9pY3dJcjJ2dmNySDF4ckdOUXlkeHBtaWFpYmgzaWMxbjZBVlJwbXRLNXprbW1ocHZXVDc0bVloM3BxSVlIdnNjZG84UTJiaWJ3RmlhbVNYVS8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk5xR3BDWkhhNjMwQmNPUVJpYjJDNXU3eVU1TU16UDlnVEphaFpjTGJCQmpocTlicXNSckNmekVpYzlJcHRhb1F4MUN0aDh6VWdpYUkzcS8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkxNWUJUcUZIQlJpYzF6Rk04bVk2SENVRjAwTWJiNGQwcXA3RFFvRGVSRDRLRTNyaWJyWVYwMk1pYkhVdVB5V1duUzQ4ajhzaWNmWU9pYWlhUC8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UlBRcGljSmJ0dXl4aFNHb1pYb2VpYmxSaG5XcGZUR25ERmliZkd6d2t4NGdEaWFBeVJNVzFpYkFqYmx3U285b09pYkpEY1hJR25XeERNZHlDZS8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkVicVkwV2RFZ0RINFdLa2EzSGliQWc2VmlhQ216OEpFU0ZrOWNuQTVZbVdSaWFGZjJLMWhwYXZDMjBZV1Y1SHZ0dTZ6aFZvN0dUemliaWNBLzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Ukp5NVRhRk15VVJ3RmVQbXZlOFRCOXUxV2liNVNKQmZpY1QxTElSbWVla3FWVlhJMEdpYjdUVU9UcGpUTXIwelJySDRRWnZwRDFnUmtNSC8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UlBXVkNTMklVOXBuYVhiNWhYYmljV3QxYUhuNVd0c0JMTjBGaWFpYkFuMm9Ba3RpYUZXZXBkNkZYdzZHYkp4Qmp3ZWt3TWZNVHh5TXN5UHUvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk1sdnVEQzlpYUo5ZW5uT1FvaWNXbGljZE9FZkpmVExmcmljS2ljajZOUmtPSWVBbTZQbGVjNkxiWGFpYlFwaWNsaWJtM29nY2ljMG1qSnlTczhIaWEvMA%3D%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkV4RWF5NXFNV2pON3JiU0RmQkg5VUxuWmJUN3h0QkdPNmhLQWFJYTdtZEQwQjNVRGo1eHNsTHRjb09pYnhXSkJtaWNrTXpVeW1GaGZILzA%3D.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2Uk9pY3dJcjJ2dmNySDF5Nms2MDhvcDFRVXlTamxLdTQzRG1Od2lhU1o2b1JsdUxkRlJ4YkxPdmdrTU9NcExhZGcxSExDU2ljSzVMd2lhd1cvMA%3D%3D.jpg?w=700&webp=1)
类具有继承关系,并且子类类型可以向上转型看做父类类型,如果我们从 Person 派生出 Student和Teacher ,并都写了一个 whoAmI() 方法:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def whoAmI(self):
return 'I am a Person, my name is %s' % self.name class Student(Person):
def __init__(self, name, gender, score):
super(Student, self).__init__(name, gender)
self.score = score
def whoAmI(self):
return 'I am a Student, my name is %s' % self.name class Teacher(Person):
def __init__(self, name, gender, course):
super(Teacher, self).__init__(name, gender)
self.course = course
def whoAmI(self):
return 'I am a Teacher, my name is %s' % self.name
在一个函数中,如果我们接收一个变量 x,则无论该 x 是 Person、Student还是 Teacher,都可以正确打印出结果:
def who_am_i(x):
print x.whoAmI() p = Person('Tim', 'Male')
s = Student('Bob', 'Male', 88)
t = Teacher('Alice', 'Female', 'English') who_am_i(p)
who_am_i(s)
who_am_i(t)
运行结果:
I am a Person, my name is Tim
I am a Student, my name is Bob
I am a Teacher, my name is Alice
由于Python是动态语言,所以,传递给函数 who_am_i(x)的参数 x 不一定是 Person 或 Person 的子类型。任何数据类型的实例都可以,只要它有一个whoAmI()的方法即可:
class Book(object):
def whoAmI(self):
return 'I am a book'
这是动态语言和静态语言(例如Java)最大的差别之一。动态语言调用实例方法,不检查类型,只要方法存在,参数正确,就可以调用。
除了从一个父类继承外,Python允许从多个父类继承,称为多重继承。
多重继承的继承链就不是一棵树了,它像这样:
class A(object):
def __init__(self, a):
print 'init A...'
self.a = a class B(A):
def __init__(self, a):
super(B, self).__init__(a)
print 'init B...' class C(A):
def __init__(self, a):
super(C, self).__init__(a)
print 'init C...' class D(B, C):
def __init__(self, a):
super(D, self).__init__(a)
print 'init D...'
看下图:
像这样,D 同时继承自 B 和 C,也就是 D 拥有了 A、B、C 的全部功能。多重继承通过 super()调用__init__()方法时,A虽然被继承了两次,但__init__()只调用一次:
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkREN1BpY3ZpY2liaGduMDhteVlaMUxMYTA5T1U1dm45VTVNanppY3ZpYTdpYVBxU2RPRGp4aWJDRGNLQk82VnBWczNHMmxPT051SzZBUjJSWGsvMA%3D%3D.jpg?w=700&webp=1)
函数了:
>>> getattr(s, 'name') # 获取name属性
'Bob' >>> setattr(s, 'name', 'Adam') # 设置新的name属性 >>> s.name
'Adam' >>> getattr(s, 'age') # 获取age属性,但是属性不存在,报错:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'Student' object has no attribute 'age' >>> getattr(s, 'age', 20) # 获取age属性,如果属性不存在,就返回默认值20:
20
如果要把一个类的实例变成 str,就需要实现特殊方法__str__():
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.gender)
现在,在交互式命令行下用 print 试试:
>>> p = Person('Bob', 'male')
>>> print p
(Person: Bob, male)
但是,如果直接敲变量 p:
>>> p
<main.Person object at 0x10c941890>
似乎__str__() 不会被调用。
因为 Python 定义了__str__()和__repr__()两种方法,__str__()用于显示给用户,而__repr__()用于显示给开发人员。
有一个偷懒的定义__repr__的方法:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender
def __str__(self):
return '(Person: %s, %s)' % (self.name, self.gender)
__repr__ = __str__
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkNMNzE0ZUNVTlNLTzR5bXNOU0VpYkgzVTBYdTZCYk13aWFlQVdUWE9uMTlJTEtTY2FlZWppYmNnc09yOVB3SEdPYnlMaGRzb2NydWh6US8w.jpg?w=700&webp=1)
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkI1UVBVYmJDbmNBZjJpYWJJbWliNXdYQ0NUZ0R4dzE0dXBZWFJDd29QTUcxN1pPNWQ3cnN6YlJVNjhWZmY3cHpReTlVTFBFVW94VHIzLzA%3D.jpg?w=700&webp=1)
if b == 0:
return a
return gcd(b, a%b)
如果要把 Rational 转为 int,应该使用:
r = Rational(12, 5)
n = int(r)
要让int()函数正常工作,只需要实现特殊方法__int__():
class Rational(object):
def __init__(self, p, q):
self.p = p
self.q = q
def __int__(self):
return self.p // self.q
结果如下:
>>> print int(Rational(7, 2))
3
>>> print int(Rational(1, 3))
0
同理,要让float()函数正常工作,只需要实现特殊方法__float__()。
因为Python支持高阶函数,在函数式编程中我们介绍了装饰器函数,可以用装饰器函数把 get/set 方法“装饰”成属性调用:
class Student(object):
def __init__(self, name, score):
self.name = name
self.__score = score
@property
def score(self):
return self.__score
@score.setter
def score(self, score):
if score < 0 or score > 100:
raise ValueError('invalid score')
self.__score = score
注意: 第一个score(self)是get方法,用@property装饰,第二个score(self, score)是set方法,用@score.setter装饰,@score.setter是前一个@property装饰后的副产品。
现在,就可以像使用属性一样设置score了:
>>> s = Student('Bob', 59)
>>> s.score = 60
>>> print s.score
60
>>> s.score = 1000
Traceback (most recent call last):
...
ValueError: invalid score
说明对 score 赋值实际调用的是 set方法。
__slots__
由于Python是动态语言,任何实例在运行期都可以动态地添加属性。
如果要限制添加的属性,例如,Student类只允许添加 name、gender和score 这3个属性,就可以利用Python的一个特殊的__slots__来实现。
顾名思义,__slots__是指一个类允许的属性列表:
class Student(object):
__slots__ = ('name', 'gender', 'score')
def __init__(self, name, gender, score):
self.name = name
self.gender = gender
self.score = score
现在,对实例进行操作:
>>> s = Student('Bob', 'male', 59)
>>> s.name = 'Tim' # OK
>>> s.score = 99 # OK
>>> s.grade = 'A'
Traceback (most recent call last):
...
AttributeError: 'Student' object has no attribute 'grade'
__slots__的目的是限制当前类所能拥有的属性,如果不需要添加任意动态的属性,使用__slots__也能节省内存。
一个类实例也可以变成一个可调用对象,只需要实现一个特殊方法__call__()。
我们把 Person 类变成一个可调用对象:
class Person(object):
def __init__(self, name, gender):
self.name = name
self.gender = gender def __call__(self, friend):
print 'My name is %s...' % self.name
print 'My friend is %s...' % friend
现在可以对 Person 实例直接调用:
>>> p = Person('Bob', 'male')
>>> p('Tim')
My name is Bob...
My friend is Tim...
单看 p('Tim') 你无法确定 p 是一个函数还是一个类实例,所以,在Python中,函数也是对象,对象和函数的区别并不显著。
![Python基础学习笔记FromImooc.com Python基础学习笔记FromImooc.com](https://image.shishitao.com:8440/aHR0cDovL3AucWxvZ28uY24vcXFtYWlsX2hlYWQvOGJvTE1sREoyN1F3OXFkbk1taWE2UkdWOGdsQWhBUng3YkZQN0NpY0lRdk1JRmc2M1I4djNDbzZxaWJKOWVUQ2NSa2JKaWJXcmVxUUFkcXU5aWJPTGlhZlJ6dFN4N2Z6eTBXWFRrLzA%3D.jpg?w=700&webp=1)