最近在學(xué)習(xí)python,把學(xué)習(xí)的過(guò)程記錄下來(lái),方便以后查看
1. 學(xué)習(xí)資料
菜鳥(niǎo)教程
Python官網(wǎng)
Python論壇
廖學(xué)峰的官方網(wǎng)站
2. 開(kāi)發(fā)環(huán)境
因?yàn)樵趍ac上做開(kāi)發(fā),系統(tǒng)自帶了2.7的python版本。官網(wǎng)目前python最新版本為3.6.
2.x和3.x語(yǔ)法上有不同,既然剛開(kāi)始學(xué)習(xí),果斷入手3.6版本。
安裝完成后,現(xiàn)在系統(tǒng)中有兩個(gè)版本的python了。因此修改一下環(huán)境變量,在命令行中輸入vim ~/.bash_profile
在其中輸入以下兩行
alias p3="python3"
alias p2="python2"
保存退出,這樣在命令行中就可以輸入p2或者p3來(lái)打開(kāi)不同版本了
關(guān)于IDE的選擇,菜鳥(niǎo)教程上也介紹了幾種,最受推崇的應(yīng)該是PyCharm了.但因?yàn)槭鞘召M(fèi)版本,而且費(fèi)用不菲。自己也確實(shí)懶得去找破解版了,所以使用SublimeText3。
SublimeText是可以安裝插件的,然后將其打造成一個(gè)Python的開(kāi)發(fā)利器。插件的事情以后再研究了。
3.Pip包管理工具
安裝python時(shí)會(huì)自動(dòng)安裝pip
可以輸入以下命令查看pip版本
pip3 --version
使用方法
pip3 list --outdated
查看哪些包需要更新
pip3 install demjson
安裝軟件包
pip3 install --upgrade SomePackage
升級(jí)軟件包
pip3 uninstall SomePackage
卸載軟件包
pip3 search SomePackage
查找軟件包
pip3 show demjson
查看軟件包詳情
pip3 list
列出軟件包清單
4. 語(yǔ)法
第一個(gè)程序
#!/usr/local/bin/python3
#coding=utf-8
print("你好,世界");
在sublime中輸入上面三行代碼保存。在命令行中進(jìn)入到文件所在路徑。輸入
p3 hello.py
即可看到運(yùn)行結(jié)果。
代碼說(shuō)明:
代碼第一行表示可執(zhí)行文件所在路徑。因?yàn)楝F(xiàn)在使用的是python3,所以路徑為代碼中的地址。菜鳥(niǎo)教程中使用的仍是python2.x,因此教程上的路徑為#!/usr/bin/python
。此行代碼作用是可以在路徑下直接用./
來(lái)執(zhí)行文件
在命令行也可通過(guò)以下命令查看結(jié)果
chmod +x hello.py
./hello.py
代碼第二行表示文件編碼為utf-8,如果不寫(xiě)的話在顯示中文時(shí)會(huì)報(bào)錯(cuò)。
python標(biāo)識(shí)符
- 所有標(biāo)識(shí)符可以包括英文、數(shù)字以及下劃線(_),但不能以數(shù)字開(kāi)頭,區(qū)分大小寫(xiě);
- 以下劃線開(kāi)頭的標(biāo)識(shí)符是有特殊意義的。以單下劃線開(kāi)頭(_foo)的代表不能直接訪問(wèn)的類屬性,需通過(guò)類提供的接口進(jìn)行訪問(wèn),不能用"from xxx import *"而導(dǎo)入;
- 以雙下劃線開(kāi)頭的(__foo)代表類的私有成員;
- 以雙下劃線開(kāi)頭和結(jié)尾的(__foo__)代表python里特殊方法專用的標(biāo)識(shí),如__init__() 代表類的構(gòu)造函數(shù)。
行和縮進(jìn)
Python的代碼塊不使用大括號(hào)來(lái)控制類,而是使用縮進(jìn)來(lái)控制
Python語(yǔ)句中一般以新行作為為語(yǔ)句的結(jié)束符。
可以使用斜杠( \)將一行的語(yǔ)句分為多行顯示
total = item_one + \
item_two + \
item_three
語(yǔ)句中包含[], {} 或 () 括號(hào)就不需要使用多行連接符
days = ['Monday', 'Tuesday', 'Wednesday',
'Thursday', 'Friday']
引號(hào)
Python 接收單引號(hào)( ' )、雙引號(hào)( " )、三引號(hào)( ''' 或 """ ) 來(lái)表示字符串,其中三引號(hào)可以由多行組成,編寫(xiě)多行文本的快捷語(yǔ)法
word = 'word'
sentence = "這是一個(gè)句子。"
paragraph = """這是一個(gè)段落。
包含了多個(gè)語(yǔ)句"""
注釋
# 第一個(gè)注釋
'''
這是多行注釋,使用單引號(hào)。
這是多行注釋,使用單引號(hào)。
這是多行注釋,使用單引號(hào)。
'''
"""
這是多行注釋,使用雙引號(hào)。
這是多行注釋,使用雙引號(hào)。
這是多行注釋,使用雙引號(hào)。
"""
等待用戶輸入
下面的程序在按回車鍵后就會(huì)等待用戶輸入."\n"在結(jié)果輸出前會(huì)輸出一個(gè)新的空行。一旦用戶按下 enter(回車) 鍵退出,其它鍵顯示
#!/usr/local/bin/python3
#coding=utf-8
print("你好,世界");
text = input("\nPress the enter key to exit.\n")
print("output:" + text)
數(shù)據(jù)類型
Python支持以下五中基本數(shù)據(jù)類型:
- Numbers(數(shù)字)
- String(字符串)
- List(列表)
- Tuple(元組)
- Dictionary(字典)
- Set(集合)
字符串
s="1234567890"
可以通過(guò)下標(biāo)來(lái)截取字符串 p[頭下標(biāo):尾下標(biāo)]
p=s[1:5]
print(p)
//p的結(jié)果是 2345
“+”是連字符,“*”是重復(fù)符號(hào)
#!/usr/local/bin/python3
#coding=utf-8
str = 'Hello World!'
print(str) # 輸出完整字符串
print(str[0]) # 輸出字符串中的第一個(gè)字符
print(str[2:5]) # 輸出字符串中第三個(gè)至第五個(gè)之間的字符串
print(str[2:]) # 輸出從第三個(gè)字符開(kāi)始的字符串
print(str * 2) # 輸出字符串兩次
print(str + "TEST") # 輸出連接的字符串
輸出結(jié)果:
Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST
Python列表(List)
#!/usr/local/bin/python3
#coding=utf-8
list = [ 'runoob',786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']
print(list) # 輸出完整列表
print(list[0]) # 輸出列表的第一個(gè)元素
print(list[1:3]) # 輸出第二個(gè)至第三個(gè)的元素
print(list[2:]) # 輸出從第三個(gè)開(kāi)始至列表末尾的所有元素
print(tinylist * 2) # 輸出列表兩次
print(list + tinylist) # 打印組合的列表
以上輸出結(jié)果:
['runoob', 786, 2.23, 'john', 70.2]
runoob
[786, 2.23]
[2.23, 'john', 70.2]
[123, 'john', 123, 'john']
['runoob', 786, 2.23, 'john', 70.2, 123, 'john']
del刪除元素
list1 = ['physics', 'chemistry', 1997, 2000];
print(list1)
del list1[2];
print("After deleting value at index 2 : ")
print(list1)
輸出結(jié)果:
['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]
Python元組(Tuple)
元組是另一個(gè)數(shù)據(jù)類型,類似于List(列表)。
元組用"()"標(biāo)識(shí)。內(nèi)部元素用逗號(hào)隔開(kāi)。但是元組不能二次賦值,相當(dāng)于只讀列表。
#!/usr/local/bin/python3
#coding=utf-8
tuple = ( 'runoob', 786 , 2.23, 'john', 70.2 )
tinytuple = (123, 'john')
print(tuple) # 輸出完整元組
print(tuple[0]) # 輸出元組的第一個(gè)元素
print(tuple[1:3]) # 輸出第二個(gè)至第三個(gè)的元素
print(tuple[2:]) # 輸出從第三個(gè)開(kāi)始至列表末尾的所有元素
print(tinytuple * 2) # 輸出元組兩次
print(tuple + tinytuple) # 打印組合的元組
輸出結(jié)果:
('runoob', 786, 2.23, 'john', 70.2)
runoob
(786, 2.23)
(2.23, 'john', 70.2)
(123, 'john', 123, 'john')
('runoob', 786, 2.23, 'john', 70.2, 123, 'john')
Python字典(Dictionary)
#!/usr/local/bin/python3
#coding=utf-8
dict = {}
dict['one'] = "This is one"
dict[2] = "This is two"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
print(dict['one']) # 輸出鍵為'one' 的值
print(dict[2]) # 輸出鍵為 2 的值
print(tinydict) # 輸出完整的字典
print(tinydict.keys()) # 輸出所有鍵
print(tinydict.values()) # 輸出所有值
輸出結(jié)果為:
This is one
This is two
{'name': 'john', 'code': 6734, 'dept': 'sales'}
dict_keys(['name', 'code', 'dept'])
dict_values(['john', 6734, 'sales'])
Python集合(Set)
set和dict類似,也是一組key的集合,但不存儲(chǔ)value。由于key不能重復(fù),所以,在set中,沒(méi)有重復(fù)的key
s = set([1, 1, 2, 2, 3, 3])
print(s)
s.add(4)
print(s)
s.add(4)
print(s)
s.remove(4)
print(s)
輸出結(jié)果:
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 3}
Python運(yùn)算符
運(yùn)算符 | 描述 | 實(shí)例 |
---|---|---|
** | 冪 | 返回x的y次冪 a**b 為10的20次方, 輸出結(jié)果 100000000000000000000 |
// | 取整除 | 返回商的整數(shù)部分 9//2 輸出結(jié)果 4 , 9.0//2.0 輸出結(jié)果 4.0 |
and | x and y | 布爾"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計(jì)算值。 (a and b) 返回 20。 |
or | x or y | 布爾"或" - 如果 x 是非 0,它返回 x 的值,否則它返回 y 的計(jì)算值。 (a or b) 返回 10。 |
not | not x | 布爾"非" - 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。 not(a and b) 返回 False |
in | 如果在指定的序列中找到值返回 True,否則返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
not in | 如果在指定的序列中沒(méi)有找到值返回 True,否則返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
is | is是判斷兩個(gè)標(biāo)識(shí)符是不是引用自一個(gè)對(duì)象 | x is y, 如果 id(x) 等于 id(y) , is 返回結(jié)果 1 |
is not | is not是判斷兩個(gè)標(biāo)識(shí)符是不是引用自不同對(duì)象 | x is not y, 如果 id(x) 不等于 id(y). is not 返回結(jié)果 1 |
if語(yǔ)句
#!/usr/local/bin/python3
#coding=utf-8
num = 5
if num == 3: # 判斷num的值
print('boss')
elif num == 2:
print('user')
elif num == 1:
print('worker')
elif num < 0: # 值小于零時(shí)輸出
print('error')
else:
print('roadman') # 條件均不成立時(shí)輸出
while語(yǔ)句
i = 1
while i < 10:
i += 1
if i%2 > 0: # 非雙數(shù)時(shí)跳過(guò)輸出
continue
print(i) # 輸出雙數(shù)2、4、6、8、10
i = 1
while 1: # 循環(huán)條件為1必定成立
print(i) # 輸出1~10
i += 1
if i > 10: # 當(dāng)i大于10時(shí)跳出循環(huán)
break
while...else語(yǔ)句和for...else語(yǔ)句
#!/usr/local/bin/python3
#coding=utf-8
count = 0
while count < 5:
print(count, " is less than 5")
count = count + 1
else:
print(count, " is not less than 5")
for循環(huán)
for letter in 'Python': # 第一個(gè)實(shí)例
print('當(dāng)前字母 :', letter)
fruits = ['banana', 'apple', 'mango']
for fruit in fruits: # 第二個(gè)實(shí)例
print('當(dāng)前字母 :', fruit)
print("Good bye!")
通過(guò)序列索引迭代
#!/usr/local/bin/python3
#coding=utf-8
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print('當(dāng)前水果 :', fruits[index])
print("Good bye!")
pass語(yǔ)句
pass 不做任何事情,一般用做占位語(yǔ)句。
#!/usr/local/bin/python3
#coding=utf-8
# 輸出 Python 的每個(gè)字母
for letter in 'Python':
if letter == 'h':
pass
print('這是 pass 塊')
print('當(dāng)前字母 :', letter)
print("Good bye!")
python轉(zhuǎn)義字符
轉(zhuǎn)義字符 | 描述 |
---|---|
\(在行尾時(shí)) | 續(xù)行符 |
\\ | 反斜杠符號(hào) |
' | 單引號(hào) |
" | 雙引號(hào) |
\a | 響鈴 |
\b | 退格(Backspace) |
\e | 轉(zhuǎn)義 |
\000 | 空 |
\n | 換行 |
\v | 縱向制表符 |
\t | 橫向制表符 |
\r | 回車 |
\f | 換頁(yè) |
\oyy | 八進(jìn)制數(shù),yy代表的字符,例如:\o12代表?yè)Q行 |
\xyy | 十六進(jìn)制數(shù),yy代表的字符,例如:\x0a代表?yè)Q行 |
\other | 其它的字符以普通格式輸出 |
Python字符串格式化
print("My name is %s and weight is %d kg!" % ('Zara', 21) )
輸出:
My name is Zara and weight is 21 kg!
日期和時(shí)間
import time; # 引入time模塊
#獲取當(dāng)前時(shí)間戳
ticks = time.time()
print("當(dāng)前時(shí)間戳為:", ticks)
#當(dāng)前時(shí)間戳為: 1486715050.71681
#獲取當(dāng)前時(shí)間
localtime = time.localtime(time.time())
print("本地時(shí)間為 :", localtime)
#本地時(shí)間為 : time.struct_time(tm_year=2017, tm_mon=2, tm_mday=10, tm_hour=16, tm_min=24, tm_sec=10, tm_wday=4, tm_yday=41, tm_isdst=0)
#獲取格式化的時(shí)間
localtime = time.asctime( time.localtime(time.time()) )
print("本地時(shí)間為 :", localtime)
#本地時(shí)間為 : Fri Feb 10 16:24:10 2017
# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) )
#2017-02-10 16:24:10
# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) )
#Fri Feb 10 16:24:10 2017
# 將格式字符串轉(zhuǎn)換為時(shí)間戳
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a,"%a %b %d %H:%M:%S %Y")))
#1459175064.0
元組時(shí)間
很多Python函數(shù)用一個(gè)元組裝起來(lái)的9組數(shù)字處理時(shí)間:
序號(hào) | 字段 | 屬性 | 值 |
---|---|---|---|
0 | 4位數(shù)年 | tm_year | 2008 |
1 | 月 | tm_mon | 1 到 12 |
2 | 日 | tm_mday | 1到31 |
3 | 小時(shí) | tm_hour | 0到23 |
4 | 分鐘 | tm_min | 0到59 |
5 | 秒 | tm_sec | 0到61 (60或61 是閏秒) |
6 | 一周的第幾日 | tm_wday | 0到6 (0是周一) |
7 | 一年的第幾日 | tm_yday | 1到366 (儒略歷) |
8 | 夏令時(shí) | tm_isdst | -1, 0, 1, -1是決定是否為夏令時(shí)的旗幟 |
獲取日歷
import calendar
cal = calendar.month(2017, 2)
print("以下輸出2017年2月份的日歷:")
print(cal)
輸出:
February 2017
Mo Tu We Th Fr Sa Su
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
函數(shù)
語(yǔ)法
def functionname( parameters ):
"函數(shù)_文檔字符串"
function_suite
return [expression]
# 定義函數(shù)
def printme( str ):
"打印任何傳入的字符串"
print str;
return;
# 調(diào)用函數(shù)
printme("我要調(diào)用用戶自定義函數(shù)!");
printme("再次調(diào)用同一函數(shù)");
所有參數(shù)(自變量)在Python里都是按引用傳遞。如果你在函數(shù)里修改了參數(shù),那么在調(diào)用這個(gè)函數(shù)的函數(shù)里,原始的參數(shù)也被改變了
關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)使用順序可以和函數(shù)參數(shù)聲明順序不一致
#可寫(xiě)函數(shù)說(shuō)明
def printinfo( name, age ):
"打印任何傳入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#調(diào)用printinfo函數(shù)
printinfo("miki",50) #默認(rèn)參數(shù)調(diào)用
printinfo( age=50, name="miki" );#關(guān)鍵字參數(shù)調(diào)用
默認(rèn)參數(shù)
#可寫(xiě)函數(shù)說(shuō)明
def printinfo( name, age = 35 ):
"打印任何傳入的字符串"
print "Name: ", name;
print "Age ", age;
return;
#調(diào)用printinfo函數(shù)
printinfo( age=50, name="miki" );
printinfo( name="miki" );
不定長(zhǎng)參數(shù)
# 可寫(xiě)函數(shù)說(shuō)明
def printinfo( arg1, *vartuple ):
"打印任何傳入的參數(shù)"
print "輸出: "
print arg1
for var in vartuple:
print var
return;
# 調(diào)用printinfo 函數(shù)
printinfo( 10 );
printinfo( 70, 60, 50 );
匿名函數(shù)
使用lambda
關(guān)鍵字來(lái)聲明匿名函數(shù)
# 可寫(xiě)函數(shù)說(shuō)明
sum = lambda arg1, arg2: arg1 + arg2;
# 調(diào)用sum函數(shù)
print "相加后的值為 : ", sum( 10, 20 )
print "相加后的值為 : ", sum( 20, 20 )
可變參數(shù)
在參數(shù)前添加*
,將不變參數(shù)變?yōu)榭勺儏?shù)
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
print(calc(1, 2)) #輸出5
print(calc()) #輸出0
nums = [1, 2, 3]
print(calc(nums[0], nums[1], nums[2]))
#或者
print(calc(*nums))
#輸出均為14
遞歸函數(shù)
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
當(dāng)執(zhí)行fact(1000)
會(huì)發(fā)生棧溢出。
解決遞歸調(diào)用棧溢出的方法是通過(guò)尾遞歸優(yōu)化:尾遞歸是指,在函數(shù)返回的時(shí)候,調(diào)用自身本身,并且,return語(yǔ)句不能包含表達(dá)式。這樣,編譯器或者解釋器就可以把尾遞歸做優(yōu)化,使遞歸本身無(wú)論調(diào)用多少次,都只占用一個(gè)棧幀,不會(huì)出現(xiàn)棧溢出的情況。
代碼修改如下
def fact(n):
return fact_iter(n, 1)
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
Python 模塊
support.py
#!/usr/local/bin/python3
#coding=utf-8
def print_func( par ):
print("Hello : ", par)
return
hello.py
#!/usr/local/bin/python3
#coding=utf-8
# 導(dǎo)入模塊
import support
# 現(xiàn)在可以調(diào)用模塊里包含的函數(shù)了
support.print_func("Zara")
定位模塊
當(dāng)導(dǎo)入一個(gè)模塊,Python對(duì)模塊位置的搜索順序是:
- 當(dāng)前目錄
- 如果不在當(dāng)前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每個(gè)目錄。
- 如果都找不到,Python會(huì)察看默認(rèn)路徑。UNIX下,默認(rèn)路徑一般為/usr/local/lib/python/。
模塊搜索路徑存儲(chǔ)在system模塊的sys.path變量中。變量里包含當(dāng)前目錄,PYTHONPATH和由安裝過(guò)程決定的默認(rèn)目錄。
作為環(huán)境變量,PYTHONPATH由裝在一個(gè)列表里的許多目錄組成。PYTHONPATH的語(yǔ)法和shell變量PATH的一樣。
- 在Windows系統(tǒng),典型的PYTHONPATH如下:
set PYTHONPATH=c:\python20\lib;
- 在UNIX系統(tǒng),典型的PYTHONPATH如下:
set PYTHONPATH=/usr/local/lib/python
如果要給全局變量在一個(gè)函數(shù)里賦值,必須使用global語(yǔ)句。
文件內(nèi)容操作
#!/usr/local/bin/python3
#coding=utf-8
fo = open("foo.txt", "w+")
print("文件名: ", fo.name)
print("是否已關(guān)閉 : ", fo.closed)
print("訪問(wèn)模式 : ", fo.mode)
#print("末尾是否強(qiáng)制加空格 : ", fo.softspace)
fo.write("www.runoob.com!\nVery good site!");
fo.seek(0, 0);
str = fo.read(10);
print("fileContent:" + str)
fo.close()```
**文件目錄操作**
import os
重命名文件test1.txt到test2.txt。
os.rename( "test1.txt", "test2.txt" )
刪除一個(gè)已經(jīng)存在的文件test2.txt
os.remove("test2.txt")
創(chuàng)建目錄test
os.mkdir("testdir")
將當(dāng)前目錄改為"/home/newdir"
os.chdir("/home/newdir")
給出當(dāng)前的目錄
print(os.getcwd())
刪除”/tmp/test”目錄
os.rmdir( "/tmp/test" )
打開(kāi)文件,若文件不存在,則關(guān)閉文件 相當(dāng)于try...finally...
with open('/path/to/file', 'r') as f:
print(f.read())
**面向?qū)ο?*
類的聲明和調(diào)用.一般類是寫(xiě)在單獨(dú)的一個(gè)文件中
!/usr/local/bin/python3
coding=utf-8
class Employee:
'所有員工的基類'
empCount = 0
def init(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee %d" % Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, ", Salary: ", self.salary)
def del(self):
print("析構(gòu)函數(shù)執(zhí)行")
"創(chuàng)建 Employee 類的第一個(gè)對(duì)象"
emp1 = Employee("Zara", 2000)
"創(chuàng)建 Employee 類的第二個(gè)對(duì)象"
emp2 = Employee("Manni", 5000)
emp1.displayEmployee()
emp2.displayEmployee()
print("Total Employee %d" % Employee.empCount)
**繼承**
python支持多重繼承
class A: # 定義類 A
.....
class B: # 定義類 B
.....
class C(A, B): # 繼承類 A 和 B
.....
你可以使用issubclass()或者isinstance()方法來(lái)檢測(cè)。
- issubclass() - 布爾函數(shù)判斷一個(gè)類是另一個(gè)類的子類或者子孫類,語(yǔ)法:issubclass(sub,sup)
- isinstance(obj, Class) 布爾函數(shù)如果obj是Class類的實(shí)例對(duì)象或者是一個(gè)Class子類的實(shí)例對(duì)象則返回true。
**分文件組織源碼**
firstClass.py
!/usr/local/bin/python3
coding=utf-8
class firstClass(object):
"""docstring for firstClass"""
def init(self, arg):
super(firstClass, self).init()
self.arg = arg
def printMe(self):
print(__name__)
secondClass.py
!/usr/local/bin/python3
coding=utf-8
class secondClass(object):
"""docstring for secondClass"""
def init(self, arg):
super(secondClass, self).init()
self.arg = arg
def printMe(self):
print(__name__)
hello.py
!/usr/local/bin/python3
coding=utf-8
import firstClass
import secondClass
class1 = firstClass.firstClass('a')
class2 = secondClass.secondClass('a')
class1.printMe()
class2.printMe()