ディープと浅いコピーコピー
ディープコピーと浅いコピー差がリストされているのと同じ領域内のメモリに記憶されているかどうかの両方、すなわち、元のリストからリストをコピーした後、その任意の変形は、他に影響を与えるだろうかどうか、ということです深いと浅いコピーのコピーのための重要な基礎を区別する。
シャローコピー:B変数が変化すると、変数の変更、
ディープコピー:変数の変更、影響を受けたB変数
コピー():第一層のためのリストには、ディープコピーが、ネストされたリスト、まだ浅いコピーを達成することです。
old = [1,[1,2,3],3]
new = old.copy()
print('Before:')
print(old)
print(new)
new[0] = 3
new[1][0] =3
print('After:')
print(old)
print(new)
output:
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [3, 2, 3], 3] #对于list的第一层(非嵌套层),实现了深拷贝,对于嵌套的list,仍然是浅拷贝。
[3, [3, 2, 3], 3]
ループ反復するためのリストに新しい要素を一つずつて。この方法は、さらに深いコピーを達成するために、第1層のみの浅いコピーです。
使用して[:]をスライスはリスト全体のシャローコピーかもしれません。同様に、深いコピーを達成するために、第1層のみ。
:のフル・ディープコピー達成
deepcopy場合の方法を()、その後、どんなに多くの層に関係なく、新しいリストを形成するもの、および独立したすべての元を取得し、これが最も安全で最も効果的な方法です。
import copy
old = [1,[1,2,3],3]
new = copy.deepcopy(old)
print('Before:')
print(old)
print(new)
new[0] = 3
new[1][0] = 3
print('After:')
print(old)
print(new)
output:
Before:
[1, [1, 2, 3], 3]
[1, [1, 2, 3], 3]
After:
[1, [1, 2, 3], 3]
[3, [3, 2, 3], 3]
リスト
リスト方式
list.append(obj)
在列表末尾添加新的对象
list.count(obj)
统计某个元素在列表中出现的次数
list.extend(seq)
在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj)
从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj)
将对象插入列表
list.pop([index=-1])
移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj)
移除列表中某个值的第一个匹配项
list.reverse()
反向列表中元素
list.sort( key=None, reverse=False)
对原列表进行排序
list.clear()
清空列表
list.copy()
复制列表
モジュール
モジュールは関係なく、インポートを実行する回数を、一度にインポートされません。これは、何度も何度も実行導入され、モジュールを防ぐことができます。
私たちは、importステートメントを使用すると、Pythonインタプリタは、対応するファイルを見つける方法ですか?これは、Pythonの検索パスを必要とする、検索パスがディレクトリ名のシリーズで構成され、Pythonインタプリタは、導入モジュールを検索するためにこれらのディレクトリからになります。Pythonの検索パスを表示します。
>>> import sys
>>> sys.path
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
>>>
インポート...から
Pythonの声明からは、現在の名前空間にモジュールから指定された部分をインポートすることができます。
...インポート*
現在の名前空間にすべてのモジュールのすべての内容が、単一のアンダースコア(_)、プライベート関数またはこのケースではない始まる変数によってそれら。ほとんどの場合、Pythonプログラマは、このメソッドを使用しないでください。他のソースの導入にちなんで名づけられ、既存の定義をカバーする可能性があります。別のモジュールは、関数または関数名と同じ名前が同じことを書かれている必要があります含まれている場合は混乱を招く、そしてデバッグ時に見つけることは容易ではなかっただろう。
パッケージ
ここで可能なパケット構造(階層型ファイルシステム)です。
sound/ 顶层包
__init__.py 初始化 sound 包
formats/ 文件格式转换子包
__init__.py 有__init__.py才被认为是一个包
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 声音效果子包
__init__.py
echo.py echo模块
surround.py surround模块
reverse.py reverse模块
...
filters/ filters 子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
時間内にパッケージをインポート、Pythonはこのパッケージを探して来るのsys.pathのディレクトリに応じてサブディレクトリが含まれています。
ディレクトリだけ呼ば含まれているのinitの.pyファイル不注意が有効モジュール検索パスに影響を与える(例えば、文字列と呼ばれる)主に名前の下品な虐待のいくつかを回避するために、パッケージとみなされます。
import sound.effects.echo
# 这将会导入子模块:sound.effects.echo。 他必须使用全名去访问:
sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)
#还有一种导入子模块的方法是:
from sound.effects import echo
#这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用:
echo.echofilter(input, output, delay=0.7, atten=4)
#还有一种变化就是直接导入一个函数或者变量
from sound.effects.echo import echofilter
#这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数:
echofilter(input, output, delay=0.7, atten=4)
なお、パッケージ内の対応する項目がサブモジュール(サブパケット)、またはそのような関数、クラス、または変数としてパッケージ内部に定義されている他の名前であってもよい場合、パッケージのインポートアイテムからこのフォームを使用する場合。
フォームのインポートitem.subitem.subsubitemは最後のものを除いて、このフォームを導入した場合、パッケージがなければならず、最後の一つは、変数や関数モジュールまたはパッケージかもしれませんが、クラス名にすることはできません。
モジュールのインポートについて、独自のプログラムを書き、それがの使用に必要な場合に以下に示すように、例えば、後でそれを保存することです。
下記\テスト:私はそれがDへのパスだ、test1.pyのコードネームを持ちます。私はちょうどあなたが他のコードにモジュールをインポートとしてそれを取ることができ、次のステップを完了する必要があります。
import sys
sys.path.append("D:\\test")
カテゴリ
- クラス(クラス):同一のプロパティとメソッドを有するオブジェクトの集合を記述するために使用されます。これは、各オブジェクトに共通のプロパティとメソッドのセットを定義します。オブジェクトは、クラスのインスタンスです。
- 方法:クラスで定義された関数。
- クラス変数:クラス変数はインスタンス化されたオブジェクト全体で共通しています。そして、クラス変数はクラス内の関数の本体の外に定義されました。クラス変数は通常、インスタンス変数として使用されていません。
- データメンバー:クラス変数またはインスタンス変数クラスに関連するデータを処理するため、およびオブジェクトインスタンス。
- メソッドが優先されます:あなたは、サブクラスのニーズを満たすことができない場合は、親クラスから継承し、書き換えることができ、このプロセスは、オーバーライドするメソッドとして知られている方法(オーバーライド)、カバーと呼ばれています。
- ローカル変数:プロセスで定義された変数、クラスの現在のインスタンスの役割のみ。
- 変数の例:クラス宣言では、属性変数が示されています。この変数は、インスタンス変数と呼ばれますが、文は、クラス宣言内のクラスメソッドの他のメンバーに加えています。
- 継承:である、派生クラス(派生クラス)の基本クラス(基本クラス)フィールドとメソッドを継承します。継承はまた、処理された基本クラスのオブジェクトとしての派生クラスのオブジェクトを可能にします。例えば、そのような設計がある:オブジェクト・タイプが犬動物のクラスから派生し、アナログでの関係(図の実施形態では、動物犬)「(IS-A)です」。
- クラスのインスタンスを作成し、特定のオブジェクト・クラス:インスタンス化します。
- オブジェクト:クラスによって定義されるデータ構造例。オブジェクトは、2つのデータメンバ(インスタンス変数とクラス変数)および方法を含みます。
クラス変数:クラス変数はインスタンス化されたオブジェクト全体で共通しています。そして、クラス変数はクラス内の関数の本体の外に定義されました。クラス変数は通常、インスタンス変数として使用されていません。
class MyClass:
i = 12345 #类变量
def f(self):
return 'hello world'
クラスがある__init __() 、次のようにクラスがインスタンス化されるときに自動的に呼び出される特殊なメソッド(コンストラクタ)は、:
def __init__(self):
self.data = []
クラスのメソッド通常の関数から1つの特定の違いを-彼らはその名前が自己で通例であるように、余分な最初のパラメータ名を持っている必要があります。
関数の一般的な定義は異なるクラス、メソッドを定義するdefキーワード、内、クラスメソッドは、パラメータ自己が含まれている必要があり、最初のパラメータであり、自己の代表は、クラスのインスタンスです。
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问,只能在类内部访问,以两个下划线打头
__weight = 0
クラス継承、Pythonは多重継承をサポートしています
class people:
#定义基本属性
name = ''
age = 0
#定义私有属性,私有属性在类外部无法直接进行访问
__weight = 0
#定义构造方法
def __init__(self,n,a,w):
self.name = n
self.age = a
self.__weight = w
def speak(self):
print("%s 说: 我 %d 岁。" %(self.name,self.age))
#单继承示例
class student(people):
grade = ''
def __init__(self,n,a,w,g):
#调用父类的构函
people.__init__(self,n,a,w)
self.grade = g
#覆写父类的方法
def speak(self):
print("%s 说: 我 %d 岁了,我在读 %d 年级"%(self.name,self.age,self.grade))
s = student('ken',10,60,3)
s.speak()
メソッドのオーバーライドは、あなたの親クラスのメソッド関数は、あなたのニーズを満たすことができない場合、あなたはサブクラスであなたの親クラスのメソッドを書き換えることができます。
私有財産(2アンダースコア)のクラス:__ private_attrsは:プロパティがプライベートで使用したり、クラスの外部から直接アクセスすることはできません宣言します。自己.__ private_attrs方法クラスの内部で使用されます。
プライベートメソッド(2アンダースコア)クラス:__ private_method:メソッドはプライベートメソッドが唯一のクラス内で呼び出すことができるように宣言され、外部コールがクラスにすることはできません。自己.__ private_methods。
独自のメソッド(マジック方式)(2つのアンダースコアの前と後の)クラス:
__init__ : 构造函数,在生成对象时调用
__del__ : 析构函数,释放对象时使用
__repr__ : 打印,转换
__setitem__ : 按照索引赋值
__getitem__: 按照索引获取值
__len__: 获得长度
__cmp__: 比较运算
__call__: 函数调用
__add__: 加运算
__sub__: 减运算
__mul__: 乘运算
__truediv__: 除运算
__mod__: 求余运算
__pow__: 乘方
しかし、このモジュール自体は比較的プライベートで、単一のアンダースコアで始まる関数や変数にするために、外の世界を呼び出すことはできません。
主にクラスインスタンスの静的メソッドがない隠されたパラメータは、直接静的メソッドを呼び出すことができます。
ロジックベースの方法は、クラス、インスタンスメソッド呼び出しインスタンスを起動する必要があり、両方の静的メソッドが呼び出すことができます。主な違いは、送信パラメータの差が、例示的な方法は、自己静かパラメータ参照として渡され、クラスメソッドは静かパラメータ参照として渡さCLSであることです。
手を貸してもらいます
import math
dir(math) #查看模块下所有函数
['__doc__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'acos',
'acosh',
'asin',
'asinh',
'atan',
'atan2',
'atanh',
...
help(math.log) #help查看帮助
Help on built-in function log in module math:
log(...)
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
math.log.__doc__ #查看函数文档字符串
log(x[, base])
Return the logarithm of x to the given base.
If the base not specified, returns the natural logarithm (base e) of x.
import random
print(random.__file__) #查看源码的位置
C:\Users\Lenovo\AppData\Local\Programs\Python\Python36\lib\random.py
のみPythonモジュール(Module1の)、新しいスコープを導入する前に、クラス(クラス)と機能(DEF、ラムダ)、コードの他のブロック(例えば、IF / ELIF / ELSE /、/しばらくの間、等、を除い/試してください)これは、これらのステートメントの変数定義は、外部アクセス可能な、新しいスコープを導入しません。
共通機能
dec=12
bin(dec)) #十进制转二进制0b1100
oct(dec)) #十进制转八进制0o14
hex(dec)) #十进制转十六进制0xc
ord() #字符转化为ASCII码
chr() #ASCII码转化为字符
str.upper() # 把所有字符中的小写字母转换成大写字母
str.lower() # 把所有字符中的大写字母转换成小写字母
str.capitalize() # 把第一个字母转化为大写字母,其余小写
str.title() # 把每个单词的第一个字母转化为大写,其余小写