モジュール、オブジェクト向け
11596 ワード
1.内蔵関数(下) filter(関数、シーケンス)
実行結果: zipマージリスト
実行結果 map(関数、シーケンス)
実行結果:
フィルタと比較してmapが対象とするオブジェクトはシーケンス内の要素であり,要素に対応する処理結果を返す.filterはシーケンス自体に対して,関数条件に合致する値を返す.
実行結果: reduce(関数、シーケンス)、左から右へ各要素について を処理する. filter/mapとlambdaを併用 リスト式--リスト書き換え
mapとfilterを比較できます
2.モジュールモジュールはPython組織コードの基本方式である. 1つのPythonスクリプトは単独で実行することも、別のスクリプトにインポートして実行することもできます.スクリプトがインポートされて実行されると、モジュール(module)と呼ばれます. のすべてです.pyファイルはいずれもモジュールとして にインポートできます.モジュール名スクリプトのファイル名と同じ 例えばhelloという名前を書きましたpyのスクリプトは、別のスクリプトでimport hello文でインポートできます.
3.パッケージ Pythonのモジュールは、ディレクトリ別にパッケージのパッケージを作成するには、次の手順に従います. パッケージ名という名前のディレクトリ を作成このディレクトリの下にinitを作成する.pyファイル、空の 必要に応じて、スクリプトファイルまたはコンパイル済み拡張子およびサブパッケージ がディレクトリの下に格納される. import pack.m1, pack.m2, pack.m3
sys.path表示モジュール所在ディレクトリ
リストである以上、カスタムパスを挿入したい場合は、使用できます.Insert挿入、またはappendを最後に追加
カスタムディレクトリを削除するには、次の手順に従います.まとめ: モジュールはインポート可能なPythonスクリプトファイルです.パッケージはディレクトリ別のモジュールとサブパッケージで、ディレクトリの下にinitがあります.pyファイル.このファイルはパッケージの情報を格納できます.モジュールとパッケージをインポートする構文:import,import as from...import...
4.モジュールの作成とインポートの練習作成モジュール
実行結果はwcと同じです.インポートモジュール新規スクリプト3.py、中にimport 1と書いてありますが、import 1は書けません.py,実行3.py
モジュール名は数字で始まることができないので、名前を変えて再試行します.
このとき実行に成功し、wcの先頭のファイルを見ると、wcが1つ増えた.pyc、これはコンパイルされたファイルで、次回より早くwcモジュールを呼び出すのに便利です.通常、モジュールを呼び出すのは、ここでは3.py行wcを1行追加する.wordCount('asd'):
2行目は所望の結果ですが、1行目はモジュールが持参した結果であり、必要ありません.簡単な方法は直接モジュールに入ってコードを注釈することであり、互いに干渉しない方法もある.まず紹介しますname_,実行結果は_main_
以上、モジュールが実行中にnameがmainであれば、モジュールが持参したコマンドを出力し、そうでなければ実行しないと判断することができる.次を見てください.
それぞれwcを実行する.pyと3.py、結果は互いに干渉しないで、まさに必要です
5.パッケージのインポート int.pyを作成します.パッケージには が必要です.パッケージ名は、現在存在するディレクトリ名 である.ロールバック親ディレクトリ(デフォルトでは現在のディレクトリからパッケージを探しますが、この場合はパッケージをファイルとして理解できます) に入ります. ipythonテスト に入ります
任意のディレクトリでipythonテストに入りたい場合はsys.pathインポートパッケージが存在するディレクトリのパス:パッケージをインポートする他のいくつかの方法は、インポート後に実行されるコマンド:1を比較することができる.import d08.wc
2.from d 08 import wcと比較
インポート時にコマンド別名を作成する方法もあります.
6.対象紹介
クラスとオブジェクトPythonクラス定義クラス属性クラスメソッド
プロシージャ向けとオブジェクト向けプログラミング-プロシージャ向けプログラミング:関数式プログラミング,Cプログラムなど-オブジェクト向けプログラミング:C+,Java,Pythonなど
クラスとオブジェクト:オブジェクト向けの2つの重要な概念-クラス:物事の抽象であり、例えば:人間、球技-オブジェクト:クラスの一例であり、例えば:サッカー、バスケットボールの例説明:-球技はボールの特徴と行為を抽象化することができ、それから本当のボール実体をインスタンス化することができる.
オブジェクト向けの主な考え方は、-パッケージ-継承-マルチステートという考え方が複雑なプロジェクトを解決しやすく、メンテナンスが容易であることです.
クラス定義:クラスは必要な変数と関数を組み合わせて、「パッケージ」class A(object):クラスの構造:classクラス名:メンバー変数–属性メンバー関数–メソッドクラスの作成:
例:
People()はクラスで、renはPeople()のオブジェクトで、print renは直接オブジェクトを印刷し、print ren.colorは、静的プロパティと呼ばれるオブジェクトのプロパティを印刷します.
ダイナミックメソッドダイナミックメソッド:関数と同じメソッドを定義します.
メソッドでプロパティを呼び出すには、次の手順に従います.
def f(x):
if x % 2 == 0: #
return True
print filter(f,range(10))
print filter(None,range(10)) #None
実行結果:
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/t.py
[0, 2, 4, 6, 8]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
l1 = [1,2,3]
l2 = ['a','b','c']
print zip(l1,l2) #
print dict(zip(l1,l2)) #
実行結果
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/t.py
[(1, 'a'), (2, 'b'), (3, 'c')]
{1: 'a', 2: 'b', 3: 'c'}
def f(x):
if x % 2 == 0:
return True
print map(f,range(10)) # True False
print map(None,range(10))
実行結果:
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/t.py
[True, None, True, None, True, None, True, None, True, None]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
フィルタと比較してmapが対象とするオブジェクトはシーケンス内の要素であり,要素に対応する処理結果を返す.filterはシーケンス自体に対して,関数条件に合致する値を返す.
def f(x,y):
return x * y
print map(f,[1,2,3],[2,4,3]) # x*y
実行結果:
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/t.py
[2, 8, 9]
Help on built-in function reduce in module __builtin__:
reduce(...)
reduce(function, sequence[, initial]) -> value
Apply a function of two arguments cumulatively to the items of a sequence,
from left to right, so as to reduce the sequence to a single value.
For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
((((1+2)+3)+4)+5). If initial is present, it is placed before the items
of the sequence in the calculation, and serves as a default when the
sequence is empty.
print filter(lambda x:x % 2 == 0,range(10)) #
[0, 2, 4, 6, 8]
print map(lambda x,y:x*y, range(5),range(5))
[0, 1, 4, 9, 16]
print reduce(lambda x,y:x+y, range(1,101))
5050
In [2]: [i*2+10 for i in range(10)] #i 1-10 , i*2+10
Out[2]: [10, 12, 14, 16, 18, 20, 22, 24, 26, 28]
In [3]: [i for i in range(10) if i%3 == 0] #i 1-10 , 3
Out[3]: [0, 3, 6, 9]
mapとfilterを比較できます
2.モジュール
3.パッケージ
In [6]: import sys
In [7]: sys.path #
Out[7]:
['',
'/usr/bin',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/IPython/extensions']
リストである以上、カスタムパスを挿入したい場合は、使用できます.Insert挿入、またはappendを最後に追加
In [9]: sys.path.insert(1,'/root/py') # , '/root/py'
In [10]: sys.path
Out[10]:
['',
'/root/py', #
'/usr/bin',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/IPython/extensions']
カスタムディレクトリを削除するには、次の手順に従います.
In [23]: sys.path.remove('/root/py')
In [24]: sys.path
Out[24]:
['',
'/usr/bin',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/IPython/extensions']
4.モジュールの作成とインポートの練習
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
def wordCount(s):
# ,
chars = len(s)
# , ,
words = len(s.split())
# ,
lines = s.count('
')
print lines,words,chars
s = open('/etc/passwd').read()
wordCount(s)
実行結果はwcと同じです.
[root@t1 py]# python 2.py
31 56 1484
[root@t1 py]# wc /etc/passwd
31 56 1484 /etc/passwd
[root@t1 py]# vi 3.py
[root@t1 py]# python 3.py
File "3.py", line 2
import 1.py
^
SyntaxError: invalid syntax
モジュール名は数字で始まることができないので、名前を変えて再試行します.
[root@t1 py]# vi 3.py
[root@t1 py]# python 3.py
31 56 1484
[root@t1 py]# cat 3.py
#!/usr/bin/python
import wc
このとき実行に成功し、wcの先頭のファイルを見ると、wcが1つ増えた.pyc、これはコンパイルされたファイルで、次回より早くwcモジュールを呼び出すのに便利です.
[root@t1 py]# ls wc*
wc.py wc.pyc
[root@t1 py]# python 3.py
31 56 1484
0 1 3
2行目は所望の結果ですが、1行目はモジュールが持参した結果であり、必要ありません.簡単な方法は直接モジュールに入ってコードを注釈することであり、互いに干渉しない方法もある.まず紹介しますname_,実行結果は_main_
[root@t1 py]# cat wc.py
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
def wordCount(s):
# ,
chars = len(s)
# , ,
words = len(s.split())
# ,
lines = s.count('
')
print lines,words,chars
print __name__
#s = open('/etc/passwd').read()
#wordCount(s)
[root@t1 py]# python wc.py
__main__
以上、モジュールが実行中にnameがmainであれば、モジュールが持参したコマンドを出力し、そうでなければ実行しないと判断することができる.次を見てください.
[root@t1 py]# cat wc.py
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
def wordCount(s):
# ,
chars = len(s)
# , ,
words = len(s.split())
# ,
lines = s.count('
')
print lines,words,chars
if __name__ == '__main__':
s = open('/etc/passwd').read()
wordCount(s)
それぞれwcを実行する.pyと3.py、結果は互いに干渉しないで、まさに必要です
[root@t1 py]# python wc.py
31 56 1484
[root@t1 py]# python 3.py
0 1 3
5.パッケージのインポート
In [1]: from d08 import wc
In [2]: wc.wordCount('123
')
1 1 4
任意のディレクトリでipythonテストに入りたい場合はsys.pathインポートパッケージが存在するディレクトリのパス:
In [1]: import sys
In [3]: sys.path.append('/root/py') #
In [4]: sys.path
Out[4]:
['',
'/usr/bin',
'/usr/lib64/python27.zip',
'/usr/lib64/python2.7',
'/usr/lib64/python2.7/plat-linux2',
'/usr/lib64/python2.7/lib-tk',
'/usr/lib64/python2.7/lib-old',
'/usr/lib64/python2.7/lib-dynload',
'/usr/lib64/python2.7/site-packages',
'/usr/lib/python2.7/site-packages',
'/usr/lib/python2.7/site-packages/IPython/extensions',
'/root/py'] #
In [5]: from d08 import wc #
In [6]: import d08.wc
In [7]: d08.wc('asd')
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in ()
----> 1 d08.wc('asd')
TypeError: 'module' object is not callable
In [8]: d08.wc.wordCount('asd') #
0 1 3
2.from d 08 import wcと比較
In [9]: from d08.wc import wordCount
In [10]: wordCount('asd')
0 1 3
インポート時にコマンド別名を作成する方法もあります.
In [11]: from d08.wc import wordCount as wc
In [12]: wc('asd') # wc
0 1 3
6.対象紹介
クラスとオブジェクトPythonクラス定義クラス属性クラスメソッド
プロシージャ向けとオブジェクト向けプログラミング-プロシージャ向けプログラミング:関数式プログラミング,Cプログラムなど-オブジェクト向けプログラミング:C+,Java,Pythonなど
クラスとオブジェクト:オブジェクト向けの2つの重要な概念-クラス:物事の抽象であり、例えば:人間、球技-オブジェクト:クラスの一例であり、例えば:サッカー、バスケットボールの例説明:-球技はボールの特徴と行為を抽象化することができ、それから本当のボール実体をインスタンス化することができる.
オブジェクト向けの主な考え方は、-パッケージ-継承-マルチステートという考え方が複雑なプロジェクトを解決しやすく、メンテナンスが容易であることです.
クラス定義:クラスは必要な変数と関数を組み合わせて、「パッケージ」class A(object):クラスの構造:classクラス名:メンバー変数–属性メンバー関数–メソッド
class MyClass(object):
def fun(self):
print “I am function”
self
例:
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
class People(object):
color = 'yellow'
ren = People()
print ren
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/1.py
<__main__.people object="" at="">
People()はクラスで、renはPeople()のオブジェクトで、print renは直接オブジェクトを印刷し、print ren.colorは、静的プロパティと呼ばれるオブジェクトのプロパティを印刷します.
class People(object):
color = 'yellow'
ren = People()
print ren.color
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/1.py
yellow
ダイナミックメソッドダイナミックメソッド:関数と同じメソッドを定義します.
class People(object):
color = 'yellow' #
def think(self): #
print "I am a thinker"
ren = People()
print ren.color
ren.think() #
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/1.py
yellow
I am a thinker
メソッドでプロパティを呼び出すには、次の手順に従います.
#!/usr/bin/python
# -*- coding:utf8 -*-
# author: chawn
# date:
class People(object):
color = 'yellow'
def think(self):
self.color = 'black' #
print "I am a %s" % self.color
print "I am a thinker"
ren = People()
print ren.color
ren.think()
C:\Users\chawn\PycharmProjects\pyex\venv\Scripts\python.exe C:/Users/chawn/PycharmProjects/pyex/180108/1.py
yellow
I am a black
I am a thinker