當前位置:首頁 » 編程語言 » pythoncat

pythoncat

發布時間: 2022-07-10 10:58:45

❶ 問一下老師 python3.7沒有file類,怎麼dir()他的函數 還有為什麼$ cat報錯

在 Python 中,有大量的內置模塊,模塊中的定義(例如:變數、函數、類)眾多,不可能全部都記住,這時 dir() 函數就非常有用了。
dir() 是一個內置函數,用於列出對象的所有屬性及方法。在 Python 中,一切皆對象,模塊也不例外,所以模塊也可以使用 dir()。除了常用定義外,其它的不需要全部記住它,交給 dir() 就好了。

❷ Python從標准類型派生的原理是什麼

1.基類簡化了程序,使得程序的累贅部分減少,使程序簡潔。
比如,在不用基類的情況下,程序中你要設計一個鴨子類和一個鵝類,他們的成員變數都有頭,羽毛,雙腳,成員函數有喊叫,飛行等,那麼你每寫一個類都得重寫一下。如果有個基類是鳥類,那麼鴨子類和鵝類直接繼承這個基類,然後把他們獨有的特徵加進類裡面就行了。
2.易於派生出其他類。

❸ Python中catNames = catNames + [name]的含義

catNames 是個空的列表 (最上面定義的)
while True: (循環標志 )
name = input()(用戶輸入的信息 存儲在 name 這個變數中)
if name == '': (如果name 這個變數 用戶輸入的是 『空』)
break(就跳出循環)
catNames = catNames + [name] (循環執行完成後 catNames[ ]列表 = 存儲在 catNames列表中的用戶輸入 (name))
for name in catNames: (循環這個列表,把存儲在這個列表中的每個 name 都列印出來)
簡單的來說 這個程序 首先 是用一個循環標志 來循環用戶輸入 如果用戶輸入的信息不為 空 就存儲在這個列表中 如果為空就退出循環標志 在執行一個循環 把這個列表中存儲的信息 每個單獨顯示出來

❹ Python中列表的方法有什麼

Python中的列表內建了許多方法。在下文中,使用「L」代表一個列表,使用「x」代表方法的參數,以便說明列表的使用方法。

1 append()方法

列表的append()方法用於將一個項添加到列表的末尾,L.append(x)等價於L[len(L):] = [x]。

例如,使用append()方法分別將'cow'和'elephant'添加到animals列表的末尾:

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.append('cow')#等價於animals[4:]=['cow']

  • >>>animals

  • ['cat','dog','fish','dog','cow']

  • >>>animals.append('elephant')#等價於animals[5:]=['elephant']

  • >>>animals

  • ['cat','dog','fish','dog','cow','elephant']

  • 2 ()方法

    列表的()方法用於將一個項插入指定索引的前一個位置。L.(0, x)是將x插入列表的最前面,L.(len(L)), x)等價於L.append(x)。

    例如,使用()方法分別將'cow'和'elephant'插入animals列表:

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.(0,'cow')

  • >>>animals

  • ['cow','cat','dog','fish','dog']

  • >>>animals.(3,'elephant')

  • >>>animals

  • ['cow','cat','dog','elephant','fish','dog']

  • 3 extend()方法

    列表的extend()方法用於將可迭代對象的所有項追加到列表中。L.extend(iterable)等價於L[len(L):] = iterable。extend()和append()方法的區別是,extend()方法會將可迭代對象「展開」。

    例如,分別使用append()方法和extend()方法在animals列表後面追加一個包含'cow'和'elephant'的列表:

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.append(['cow','elephant'])#此處append()參數是一個列表

  • >>>animals

  • ['cat','dog','fish','dog',['cow','elephant']]

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.extend(['cow','elephant'])#此處extend()參數也是一個列表

  • >>>animals

  • ['cat','dog','fish','dog','cow','elephant']

  • 4 remove()方法

    列表的remove()方法用於移除列表中指定值的項。L.remove(x)移除列表中第一個值為x的項。如果沒有值為x的項,那麼會拋出ValueError異常。

    例如,使用remove()方法移除animals列表中值為'dog'的項:

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.remove('dog')

  • >>>animals

  • ['cat','fish','dog']

  • >>>animals.remove('dog')

  • >>>animals

  • ['cat','fish']

  • >>>animals.remove('dog')

  • Traceback(mostrecentcalllast):

  • File"",line1,in

  • ValueError:list.remove(x):xnotinlist

  • 5 pop()方法

    列表的pop()方法用於移除列表中指定位置的項,並返回它。如果沒有指定位置,那麼L.pop()移除並返回列表的最後一項。

    例如,使用pop()方法移除animals列表中指定位置的項:

  • >>>animals=['cat','dog','fish','dog']

  • >>>animals.pop()

  • 'dog'

  • >>>animals

  • ['cat','dog','fish']

  • >>>animals.pop(2)

  • 'fish'

  • >>>animals

  • ['cat','dog']

  • 在調用前面的列表方法後,並沒有列印任何值,而pop()方法列印了「彈出」的值。包括append()、()、pop()在內的方法都是「原地操作」。原地操作(又稱為就地操作)的方法只是修改了列表本身,並不返回修改後的列表。

    在類型轉換時使用的int()函數,str()函數都有返回值:

  • >>>number=123

  • >>>mystring=str(number)#將返回值賦給變數mystring

  • >>>mystring

  • '123'

  • 但是在使用「原地操作」時,大部分則不會有返回值,包括pop()方法也只是返回了被「彈出」的值,並沒有返回修改後的列表:

  • >>>animals=['cat','dog','fish','dog']

  • >>>new_animals=animals.append('cow')

  • >>>print(new_animals)

  • None

關於Python的基礎問題可以看下這個網頁的視頻教程,網頁鏈接,希望我的回答能幫到你。

❺ {'python':1,2:[tea,cat]}是標準的字典嗎

不是,因為報錯。
Traceback (most recent call last):
File "<input>", line 1, in <mole>
NameError: name 'tea' is not defined

❻ 用Python實現:輸入一個單詞,然後輸出它的所有子串,並且按照長度排序。謝謝。

❼ Python如何通過字元或數字動態獲取對象的名稱或者屬性

首先通過一個例子來看一下本文中可能用到的對象和相關概念。
#coding: UTF-8
import sys # 模塊,sys指向這個模塊對象
import inspect
def foo(): pass # 函數,foo指向這個函數對象

class Cat(object): # 類,Cat指向這個類對象
def __init__(self, name='kitty'):
self.name = name
def sayHi(self): # 實例方法,sayHi指向這個方法對象,使用類或實例.sayHi訪問
print self.name, 'says Hi!' # 訪問名為name的欄位,使用實例.name訪問

cat = Cat() # cat是Cat類的實例對象

print Cat.sayHi # 使用類名訪問實例方法時,方法是未綁定的(unbound)
print cat.sayHi # 使用實例訪問實例方法時,方法是綁定的(bound)

有時候我們會碰到這樣的需求,需要執行對象的某個方法,或是需要對對象的某個欄位賦值,而方法名或是欄位名在編碼代碼時並不能確定,需要通過參數傳遞字元串的形式輸入。舉個具體的例子:當我們需要實現一個通用的DBM框架時,可能需要對數據對象的欄位賦值,但我們無法預知用到這個框架的數據對象都有些什麼欄位,換言之,我們在寫框架的時候需要通過某種機制訪問未知的屬性。
這個機制被稱為反射(反過來讓對象告訴我們他是什麼),或是自省(讓對象自己告訴我們他是什麼,好吧我承認括弧里是我瞎掰的- -#),用於實現在運行時獲取未知對象的信息。反射是個很嚇唬人的名詞,聽起來高深莫測,在一般的編程語言里反射相對其他概念來說稍顯復雜,一般來說都是作為高級主題來講;但在Python中反射非常簡單,用起來幾乎感覺不到與其他的代碼有區別,使用反射獲取到的函數和方法可以像平常一樣加上括弧直接調用,獲取到類後可以直接構造實例;不過獲取到的欄位不能直接賦值,因為拿到的其實是另一個指向同一個地方的引用,賦值只能改變當前的這個引用而已。
1. 訪問對象的屬性
以下列出了幾個內建方法,可以用來檢查或是訪問對象的屬性。這些方法可以用於任意對象而不僅僅是例子中的Cat實例對象;Python中一切都是對象。
cat = Cat('kitty')

print cat.name # 訪問實例屬性
cat.sayHi() # 調用實例方法

print dir(cat) # 獲取實例的屬性名,以列表形式返回
if hasattr(cat, 'name'): # 檢查實例是否有這個屬性
setattr(cat, 'name', 'tiger') # same as: a.name = 'tiger'
print getattr(cat, 'name') # same as: print a.name

getattr(cat, 'sayHi')() # same as: cat.sayHi()

dir([obj]):
調用這個方法將返回包含obj大多數屬性名的列表(會有一些特殊的屬性不包含在內)。obj的默認值是當前的模塊對象。
hasattr(obj, attr):
這個方法用於檢查obj是否有一個名為attr的值的屬性,返回一個布爾值。
getattr(obj, attr):
調用這個方法將返回obj中名為attr值的屬性的值,例如如果attr為'bar',則返回obj.bar。
setattr(obj, attr, val):
調用這個方法將給obj的名為attr的值的屬性賦值為val。例如如果attr為'bar',則相當於obj.bar = val。
2. 訪問對象的元數據
當你對一個你構造的對象使用dir()時,可能會發現列表中的很多屬性並不是你定義的。這些屬性一般保存了對象的元數據,比如類的__name__屬性保存了類名。大部分這些屬性都可以修改,不過改動它們意義並不是很大;修改其中某些屬性如function.func_code還可能導致很難發現的問題,所以改改name什麼的就好了,其他的屬性不要在不了解後果的情況下修改。
接下來列出特定對象的一些特殊屬性。另外,Python的文檔中有提到部分屬性不一定會一直提供,下文中將以紅色的星號*標記,使用前你可以先打開解釋器確認一下。
2.0. 准備工作:確定對象的類型
在types模塊中定義了全部的Python內置類型,結合內置方法isinstance()就可以確定對象的具體類型了。
isinstance(object, classinfo):
檢查object是不是classinfo中列舉出的類型,返回布爾值。classinfo可以是一個具體的類型,也可以是多個類型的元組或列表。
types模塊中僅僅定義了類型,而inspect模塊中封裝了很多檢查類型的方法,比直接使用types模塊更為輕松,所以這里不給出關於types的更多介紹,如有需要可以直接查看types模塊的文檔說明。本文第3節中介紹了inspect模塊。
2.1. 模塊(mole)
__doc__: 文檔字元串。如果模塊沒有文檔,這個值是None。
*__name__: 始終是定義時的模塊名;即使你使用import .. as 為它取了別名,或是賦值給了另一個變數名。
*__dict__: 包含了模塊里可用的屬性名-屬性的字典;也就是可以使用模塊名.屬性名訪問的對象。
__file__: 包含了該模塊的文件路徑。需要注意的是內建的模塊沒有這個屬性,訪問它會拋出異常!
import fnmatch as m
print m.__doc__.splitlines()[0] # Filename matching with shell patterns.
print m.__name__ # fnmatch
print m.__file__ # /usr/lib/python2.6/fnmatch.pyc
print m.__dict__.items()[0] # ('fnmatchcase', <function fnmatchcase="" at="" 0xb73deb54="">)</function>

2.2. 類(class)
__doc__: 文檔字元串。如果類沒有文檔,這個值是None。
*__name__: 始終是定義時的類名。
*__dict__: 包含了類里可用的屬性名-屬性的字典;也就是可以使用類名.屬性名訪問的對象。
__mole__: 包含該類的定義的模塊名;需要注意,是字元串形式的模塊名而不是模塊對象。
*__bases__: 直接父類對象的元組;但不包含繼承樹更上層的其他類,比如父類的父類。
print Cat.__doc__ # None
print Cat.__name__ # Cat
print Cat.__mole__ # __main__
print Cat.__bases__ # (<type ?object?="">,)
print Cat.__dict__ # {'__mole__': '__main__', ...}</type>

2.3. 實例(instance)
實例是指類實例化以後的對象。
*__dict__: 包含了可用的屬性名-屬性字典。
*__class__: 該實例的類對象。對於類Cat,cat.__class__ == Cat 為 True。
print cat.__dict__
print cat.__class__
print cat.__class__ == Cat # True

2.4. 內建函數和方法(built-in functions and methods)
根據定義,內建的(built-in)模塊是指使用C寫的模塊,可以通過sys模塊的builtin_mole_names欄位查看都有哪些模塊是內建的。這些模塊中的函數和方法可以使用的屬性比較少,不過一般也不需要在代碼中查看它們的信息。
__doc__: 函數或方法的文檔。
__name__: 函數或方法定義時的名字。
__self__: 僅方法可用,如果是綁定的(bound),則指向調用該方法的類(如果是類方法)或實例(如果是實例方法),否則為None。
*__mole__: 函數或方法所在的模塊名。
2.5. 函數(function)
這里特指非內建的函數。注意,在類中使用def定義的是方法,方法與函數雖然有相似的行為,但它們是不同的概念。
__doc__: 函數的文檔;另外也可以用屬性名func_doc。
__name__: 函數定義時的函數名;另外也可以用屬性名func_name。
*__mole__: 包含該函數定義的模塊名;同樣注意,是模塊名而不是模塊對象。
*__dict__: 函數的可用屬性;另外也可以用屬性名func_dict。
不要忘了函數也是對象,可以使用函數.屬性名訪問屬性(賦值時如果屬性不存在將新增一個),或使用內置函數has/get/setattr()訪問。不過,在函數中保存屬性的意義並不大。
func_defaults: 這個屬性保存了函數的參數默認值元組;因為默認值總是靠後的參數才有,所以不使用字典的形式也是可以與參數對應上的。
func_code: 這個屬性指向一個該函數對應的code對象,code對象中定義了其他的一些特殊屬性,將在下文中另外介紹。
func_globals: 這個屬性指向當前的全局命名空間而不是定義函數時的全局命名空間,用處不大,並且是只讀的。
*func_closure: 這個屬性僅當函數是一個閉包時有效,指向一個保存了所引用到的外部函數的變數cell的元組,如果該函數不是一個內部函數,則始終為None。這個屬性也是只讀的。
下面的代碼演示了func_closure:
#coding: UTF-8
def foo():
n = 1
def bar():
print n # 引用非全局的外部變數n,構造一個閉包
n = 2
return bar

closure = foo()
print closure.func_closure
# 使用dir()得知cell對象有一個cell_contents屬性可以獲得值
print closure.func_closure[0].cell_contents # 2

由這個例子可以看到,遇到未知的對象使用dir()是一個很好的主意 :)
2.6. 方法(method)
方法雖然不是函數,但可以理解為在函數外面加了一層外殼;拿到方法里實際的函數以後,就可以使用2.5節的屬性了。
__doc__: 與函數相同。
__name__: 與函數相同。
*__mole__: 與函數相同。
im_func: 使用這個屬性可以拿到方法里實際的函數對象的引用。另外如果是2.6以上的版本,還可以使用屬性名__func__。
im_self: 如果是綁定的(bound),則指向調用該方法的類(如果是類方法)或實例(如果是實例方法),否則為None。如果是2.6以上的版本,還可以使用屬性名__self__。
im_class: 實際調用該方法的類,或實際調用該方法的實例的類。注意不是方法的定義所在的類,如果有繼承關系的話。
im = cat.sayHi
print im.im_func
print im.im_self # cat
print im.im_class # Cat

這里討論的是一般的實例方法,另外還有兩種特殊的方法分別是類方法(classmethod)和靜態方法(staticmethod)。類方法還是方法,不過因為需要使用類名調用,所以他始終是綁定的;而靜態方法可以看成是在類的命名空間里的函數(需要使用類名調用的函數),它只能使用函數的屬性,不能使用方法的屬性。
2.7. 生成器(generator)
生成器是調用一個生成器函數(generator function)返回的對象,多用於集合對象的迭代。
__iter__: 僅僅是一個可迭代的標記。
gi_code: 生成器對應的code對象。
gi_frame: 生成器對應的frame對象。
gi_running: 生成器函數是否在執行。生成器函數在yield以後、執行yield的下一行代碼前處於frozen狀態,此時這個屬性的值為0。
next|close|send|throw: 這是幾個可調用的方法,並不包含元數據信息,如何使用可以查看生成器的相關文檔。
def gen():
for n in xrange(5):
yield n
g = gen()
print g # <generator object gen at 0x...>
print g.gi_code # <code object gen at 0x...>
print g.gi_frame # <frame object at 0x...>
print g.gi_running # 0
print g.next() # 0
print g.next() # 1
for n in g:
print n, # 2 3 4

接下來討論的是幾個不常用到的內置對象類型。這些類型在正常的編碼過程中應該很少接觸,除非你正在自己實現一個解釋器或開發環境之類。所以這里只列出一部分屬性,如果需要一份完整的屬性表或想進一步了解,可以查看文末列出的參考文檔。
2.8. 代碼塊(code)
代碼塊可以由類源代碼、函數源代碼或是一個簡單的語句代碼編譯得到。這里我們只考慮它指代一個函數時的情況;2.5節中我們曾提到可以使用函數的func_code屬性獲取到它。code的屬性全部是只讀的。
co_argcount: 普通參數的總數,不包括*參數和**參數。
co_names: 所有的參數名(包括*參數和**參數)和局部變數名的元組。
co_varnames: 所有的局部變數名的元組。
co_filename: 源代碼所在的文件名。
co_flags: 這是一個數值,每一個二進制位都包含了特定信息。較關注的是0b100(0×4)和0b1000(0×8),如果co_flags & 0b100 != 0,說明使用了*args參數;如果co_flags & 0b1000 != 0,說明使用了**kwargs參數。另外,如果co_flags & 0b100000(0×20) != 0,則說明這是一個生成器函數(generator function)。
co = cat.sayHi.func_code
print co.co_argcount # 1
print co.co_names # ('name',)
print co.co_varnames # ('self',)
print co.co_flags & 0b100 # 0

2.9. 棧幀(frame)
棧幀表示程序運行時函數調用棧中的某一幀。函數沒有屬性可以獲取它,因為它在函數調用時才會產生,而生成器則是由函數調用返回的,所以有屬性指向棧幀。想要獲得某個函數相關的棧幀,則必須在調用這個函數且這個函數尚未返回時獲取。你可以使用sys模塊的_getframe()函數、或inspect模塊的currentframe()函數獲取當前棧幀。這里列出來的屬性全部是只讀的。
f_back: 調用棧的前一幀。
f_code: 棧幀對應的code對象。
f_locals: 用在當前棧幀時與內建函數locals()相同,但你可以先獲取其他幀然後使用這個屬性獲取那個幀的locals()。
f_globals: 用在當前棧幀時與內建函數globals()相同,但你可以先獲取其他幀……。

def add(x, y=1):
f = inspect.currentframe()
print f.f_locals # same as locals()
print f.f_back # <frame object at 0x...>
return x+y
add(2)

2.10. 追蹤(traceback)
追蹤是在出現異常時用於回溯的對象,與棧幀相反。由於異常時才會構建,而異常未捕獲時會一直向外層棧幀拋出,所以需要使用try才能見到這個對象。你可以使用sys模塊的exc_info()函數獲得它,這個函數返回一個元組,元素分別是異常類型、異常對象、追蹤。traceback的屬性全部是只讀的。
tb_next: 追蹤的下一個追蹤對象。
tb_frame: 當前追蹤對應的棧幀。
tb_lineno: 當前追蹤的行號。
def div(x, y):
try:
return x/y
except:
tb = sys.exc_info()[2] # return (exc_type, exc_value, traceback)
print tb
print tb.tb_lineno # "return x/y" 的行號
div(1, 0)

3. 使用inspect模塊
inspect模塊提供了一系列函數用於幫助使用自省。下面僅列出較常用的一些函數,想獲得全部的函數資料可以查看inspect模塊的文檔。
3.1. 檢查對象類型
is{mole|class|function|method|builtin}(obj):
檢查對象是否為模塊、類、函數、方法、內建函數或方法。
isroutine(obj):
用於檢查對象是否為函數、方法、內建函數或方法等等可調用類型。用這個方法會比多個is*()更方便,不過它的實現仍然是用了多個is*()。
im = cat.sayHi
if inspect.isroutine(im):
im()

對於實現了__call__的類實例,這個方法會返回False。如果目的是只要可以直接調用就需要是True的話,不妨使用isinstance(obj, collections.Callable)這種形式。我也不知道為什麼Callable會在collections模塊中,抱歉!我猜大概是因為collections模塊中包含了很多其他的ABC(Abstract Base Class)的緣故吧:)
3.2. 獲取對象信息
getmembers(object[, predicate]):
這個方法是dir()的擴展版,它會將dir()找到的名字對應的屬性一並返回,形如[(name, value), ...]。另外,predicate是一個方法的引用,如果指定,則應當接受value作為參數並返回一個布爾值,如果為False,相應的屬性將不會返回。使用is*作為第二個參數可以過濾出指定類型的屬性。
getmole(object):
還在為第2節中的__mole__屬性只返回字元串而遺憾嗎?這個方法一定可以滿足你,它返回object的定義所在的模塊對象。
get{file|sourcefile}(object):
獲取object的定義所在的模塊的文件名|源代碼文件名(如果沒有則返回None)。用於內建的對象(內建模塊、類、函數、方法)上時會拋出TypeError異常。
get{source|sourcelines}(object):
獲取object的定義的源代碼,以字元串|字元串列表返回。代碼無法訪問時會拋出IOError異常。只能用於mole/class/function/method/code/frame/traceack對象。
getargspec(func):
僅用於方法,獲取方法聲明的參數,返回元組,分別是(普通參數名的列表, *參數名, **參數名, 默認值元組)。如果沒有值,將是空列表和3個None。如果是2.6以上版本,將返回一個命名元組(Named Tuple),即除了索引外還可以使用屬性名訪問元組中的元素。
def add(x, y=1, *z):
return x + y + sum(z)
print inspect.getargspec(add)
#ArgSpec(args=['x', 'y'], varargs='z', keywords=None, defaults=(1,))

getargvalues(frame):
僅用於棧幀,獲取棧幀中保存的該次函數調用的參數值,返回元組,分別是(普通參數名的列表, *參數名, **參數名, 幀的locals())。如果是2.6以上版本,將返回一個命名元組(Named Tuple),即除了索引外還可以使用屬性名訪問元組中的元素。
def add(x, y=1, *z):
print inspect.getargvalues(inspect.currentframe())
return x + y + sum(z)
add(2)
#ArgInfo(args=['x', 'y'], varargs='z', keywords=None, locals={'y': 1, 'x': 2, 'z': ()})

getcallargs(func[, *args][, **kwds]):
返回使用args和kwds調用該方法時各參數對應的值的字典。這個方法僅在2.7版本中才有。
getmro(cls):
返回一個類型元組,查找類屬性時按照這個元組中的順序。如果是新式類,與cls.__mro__結果一樣。但舊式類沒有__mro__這個屬性,直接使用這個屬性會報異常,所以這個方法還是有它的價值的。
print inspect.getmro(Cat)
#(<class '__main__.Cat'>, <type 'object'>)
print Cat.__mro__
#(<class '__main__.Cat'>, <type 'object'>)

❽ 如何利用python提取unix伺服器裡面的cat結果

importcommands
a=commands.getoutput('cat/monitor/invinfo/lepus73/osdetail')
printa

❾ python基礎教程

你可以看黑馬程序員Python入門教程:
教程學習時間15天

1-3天內容:為Linux基礎命令

4-13天內容:為Python基礎教程14-15 天內容:為飛機大戰項目演練

第一階段(1-3天):

該階段首先通過介紹不同領域的三種操作系統,操作系統的發展簡史以及Linux系統的文件目錄結構讓大家對Linux系統有一個簡單的認識,同時知道為什麼要學習Linux命令。然後我們會正式學習Linux命令

1. 文件和目錄命令:ls,cd,touch,mkdir,rm

2. 拷貝和移動命令:tree,cp,mv

3. 文件內容命令:cat,more,grep

4. 遠程管理命令:ifconfig,ping,SSH的工作方式簡介以及ssh命令

5. 用戶許可權及用戶管理命令:chmod,chgrp,useradd,passwd,userdel

6. 軟體安裝及壓縮命令:apt簡介及命令,tar,gzip壓縮命令,bzip2壓縮命令

7. vim的基本使用

第二階段(4-10天)

該階段我們正式進入Python這門語言的學習,首先通過了解Python語言的起源,Python語言的設計目標,Python語言的設計哲學,Python語言的優缺點和面向對象的基本概念,以及Python語言的執行方式,還有Python集成開發環境PyCharm的使用為我們接下來的學習做鋪墊。

然後我們會學習int,string,float三種簡單的變數類型,變數間的計算,變數的輸入輸出,if判斷語句,while循環語句,for循環語句,break和continue的使用,函數的基本使用,模塊的使用,列表,元組,字典三種高級變數,字元串的常用操作。

接下來我們會通過一個名片管理系統的案例,把這一階段的知識進行一個串聯。在學習名片管理系統時,首先我們會學習怎麼去搭建這一系統的框架,然後我們會分別實現新增名片,顯示全部名片,查詢名片,刪除名片,修改名片這些功能。

最後我們會學習語法的進階內容,全局變數,局部變數,可變數據類型和不可變數據類型以及函數返回多個值,函數的預設參數,多值參數,遞歸的基本使用。

第三階段(11-13天)

該階段我們會學習面向對象(OOP)這一重要的編程思想,首先學習的知識點有類和對象的基本概念,dir函數,self的作用,初始化方法__init__,內置函數__str__,__del__,單繼承,方法重寫,私有屬性和方法,多繼承,多態,類屬性,靜態方法。

然後我們還會學習單例模式這一設計模式,異常的捕獲,異常的拋出,from import局部導入,from import導入同名工具, from import導入所有工具,包的使用,製作模塊,pip的使用以及文件的相關操作。

第四階段(14-15天)

該階段是項目演練階段,我們會帶領大家通過使用之前學習過的知識開發飛機大戰這一經典游戲,項目中分別有游戲窗口,圖像繪制,游戲循環,事件監聽,精靈和精靈組以及創建敵機,創建英雄和發射子彈,碰撞檢測等模塊

❿ python怎麼定義addcat

Python中的Mole是比較重要的概念。常見的情況是,事先寫好一個.py文 件,在另一個文件中需要import時,將事先寫好的.py文件拷貝 到當前目錄,或者是在sys.path中增加事先寫好的.py文件所在的目錄,然後import。這樣的做法,對於少數文件是可行的,但如果程序數目很 多,層級很復雜,就很吃力了。
有沒有辦法,像Java的Package一樣,將多個.py文件組織起來,以便在外部統一調用,和在內部互相調用呢?答案是有的。
主要是用到python的包的概念,python
__init__.py在包里起一個比較重要的作用
要弄明白這個問題,首先要知道,python在執行import語句時,到底進行了什麼操作,按照python的文檔,它執行了如下操作:
第1步,創建一個新的,空的mole對象(它可能包含多個mole);
第2步,把這個mole對象插入sys.mole中
第3步,裝載mole的代碼(如果需要,首先必須編譯)
第4步,執行新的mole中對應的代碼。

在執行第3步時,首先要找到mole程序所在的位置,其原理為:
如 果需要導入的mole的名字是m1,則解釋器必須找到m1.py,它首先在當前目錄查找,然後是在環境變數PYTHONPATH中查找。 PYTHONPATH可以視為系統的PATH變數一類的東西,其中包含若干個目錄。如果PYTHONPATH沒有設定,或者找不到m1.py,則繼續搜索 與python的安裝設置相關的默認路徑,在Unix下,通常是/usr/local/lib/python。
事實上,搜索的順序是:當前路徑 (以及從當前目錄指定的sys.path),然後是PYTHONPATH,然後是python的安裝設置相關的默認路徑。正因為存在這樣的順序,如果當前 路徑或PYTHONPATH中存在與標准mole同樣的mole,則會覆蓋標准mole。也就是說,如果當前目錄下存在xml.py,那麼執 行import
xml時,導入的是當前目錄下的mole,而不是系統標準的xml。

了解了這些,我們就可以先構建一個package,以普通mole的方式導入,就可以直接訪問此package中的各個mole了。

Python中的package定義很簡單,其層次結構與程序所在目錄的層次結構相同,這一點與Java類似,唯一不同的地方在於,python中的package必須包含一個__init__.py的文件。
例如,我們可以這樣組織一個package:

package1/
__init__.py
subPack1/
__init__.py
mole_11.py
mole_12.py
mole_13.py
subPack2/
__init__.py
mole_21.py
mole_22.py
……

__init__.py可以為空,只要它存在,就表明此目錄應被作為一個package處理。當然,__init__.py中也可以設置相應的內容,下文詳細介紹。

好了,現在我們在mole_11.py中定義一個函數:

def funA():
print "funcA in mole_11"
return

在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在解釋器能夠搜索到的地方)運行python:

>>>from package1.subPack1.mole_11 import funcA
>>>funcA()
funcA in mole_11

這樣,我們就按照package的層次關系,正確調用了mole_11中的函數。

細心的用戶會發現,有時在import語句中會出現通配符*,導入某個mole中的所有元素,這是怎麼實現的呢?
答案就在__init__.py中。我們在subPack1的__init__.py文件中寫

__all__ = ['mole_13', 'mole_12']

然後進入python
>>>from package1.subPack1 import *
>>>mole_11.funcA()
Traceback (most recent call last):
File "", line 1, in
ImportError: No mole named mole_11

也就是說,以*導入時,package內的mole是受__init__.py限制的。

好了,最後來看看,如何在package內部互相調用。
如果希望調用同一個package中的mole,則直接import即可。也就是說,在mole_12.py中,可以直接使用
import mole_11

如果不在同一個package中,例如我們希望在mole_21.py中調用mole_11.py中的FuncA,則應該這樣:
from mole_11包名.mole_11 import
funcA

包機制

# a.py
def add_func(a,b):
return a+b

# b.py
from a import add_func # Also can be : import a

print ("Import add_func from mole a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2)) # If using "import a" , then here should be "a.add_func"

mole可以定義在包裡面.Python定義包的方式稍微有點古怪,假設我們有一個parent文件夾,該文件夾有一個child子文件夾.child中有一個mole
a.py . 如何讓Python知道這個文件層次結構?很簡單,每個目錄都放一個名為_init_.py 的文件.該文件內容可以為空.這個層次結構如下所示:

parent
--__init_.py
--child
-- __init_.py
--a.py

b.py
那麼Python如何找到我們定義的mole?在標准包sys中,path屬性記錄了Python的包路徑.你可以將之列印出來:
import sys

print(sys.path)
通常我們可以將mole的包路徑放到環境變數PYTHONPATH中,該環境變數會自動添加到sys.path屬性.另一種方便的方法是編程中直接指定我們的mole路徑到sys.path 中:
import sys
import os
sys.path.append(os.getcwd()+'\\parent\\child')
print(sys.path)
from a import add_func
print (sys.path)
print ("Import add_func from mole a")
print ("Result of 1 plus 2 is: ")
print (add_func(1,2))

知識點:

如何定義模塊和包

如何將模塊路徑添加到系統路徑,以便python找到它們

如何得到當前路徑

熱點內容
java網站培訓學校 發布:2024-05-05 23:43:11 瀏覽:40
淘寶搜索演算法 發布:2024-05-05 23:37:07 瀏覽:998
sqlwhencasethen 發布:2024-05-05 23:27:51 瀏覽:641
模架編程軟體 發布:2024-05-05 23:26:54 瀏覽:483
存儲過程異常 發布:2024-05-05 23:24:03 瀏覽:399
winxp訪問不了win7 發布:2024-05-05 23:05:23 瀏覽:734
演算法牛 發布:2024-05-05 22:43:40 瀏覽:720
grublinux引導 發布:2024-05-05 22:37:56 瀏覽:216
unix高級編程第三版pdf 發布:2024-05-05 22:32:09 瀏覽:959
手機wap網站源碼 發布:2024-05-05 22:27:44 瀏覽:260