파이썬 기본 기록

깊고 얕은 복사 사본

딥 카피 얕은 복사 차이는, 그 어떤 임의의 변형은 다른 영향을 미치는 것인지, 원래 목록으로부터 목록을 복사 한 후,이리스트는 것과 동일한 영역의 메모리에 저장된다, 즉 둘 것인지 깊고 얕은 복사 사본을위한 중요한 기초를 구분합니다.

단순 복사본 : 변수의 변화가, 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]

새로운 요소 목록 하나 하나를 통해 반복 루프를 들어. 이 방법은 딥 카피를 달성 첫 번째 층 단순 복사본이다.

사용하여 [이 :] 슬라이스는 전체리스트의 단순 복사본 일 수있다. 유사하게, 첫 번째 층은 깊은 복사를 달성한다.

: 가득 딥 카피 달성
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 문을 사용하면, 파이썬 인터프리터는 해당 파일을 찾는 방법입니까? 이것은 파이썬 검색 경로를 포함, 검색 경로가 디렉토리 이름의 시리즈로 구성되어, 파이썬 인터프리터는 도입 모듈에 대한 검색이 디렉토리에서 켜집니다. 파이썬 검색 경로를보기 :

>>> 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']
>>> 

에서 가져 오기 ...
파이썬의 문에서이 있습니다 당신은 현재 이름 공간에 모듈에서 특정 부분을 가져옵니다.

...로부터 수입 *
현재의 이름 공간에 모든 모듈의 모든 내용이지만 단일 밑줄 (_) 또는 전용 기능이없는 경우에 시작하여 그 변수. 대부분의 경우, 파이썬 프로그래머는이 방법을 사용하지 마십시오. 다른 소스의 도입에 대한 명명 된, 기존의 정의를 포함 할 가능성이있다. 다른 모듈은 함수 또는 함수 이름의 같은 이름이 포함 된 경우 같은 혼란으로 이어질 것입니다 작성하고 디버깅하는 동안 쉽게 찾을 수 없었다해야합니다.

꾸러미

여기서 가능한 패킷 구조 (계층 적 파일 시스템)이다 :

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
          ...

시간에 패키지를 가져 오기, 파이썬은이 패키지를 찾는 것은 sys.path에 디렉토리에 따라 하위 디렉토리가 들어 올 것이다.

디렉토리에만 호출 포함 초기화는 주로 이름의 저속한 학대의 일부를 피하기 위해 평가 패키지로 간주됩니다 파일 (예를 들어,라는 문자열) 부주의 유효 모듈 검색 경로에 영향을 미칩니다.

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와이 양식을 도입하면, 마지막 하나를 제외하고, 패키지가 있어야하며, 마지막 하나는 모듈 또는 패키지가 될 수 있지만, 클래스 이름, 변수 또는 함수가 될 수 없습니다.

자신의 프로그램을 작성, 모듈을 수입에 대해서는, 예를 들어, 사용에 필요한 경우 다음과 같이 나중에 저장하는 것입니다.
아래 \ 테스트 : 나는 test1.py의 코드 이름, 그것은 D의 경로입니다 있습니다. 난 그냥 당신이 다른 코드에 모듈 가져 오기로 취할 수있는 다음 단계를 완료해야합니다.

import sys
sys.path.append("D:\\test")

범주

  • 클래스 (클래스)와 동일한 특성 및 방법을 갖는 개체의 집합을 기술하기 위해 사용. 그것은 각 개체에 공통 속성과 메소드 세트를 정의합니다. 객체는 클래스의 인스턴스입니다.
  • 방법 : 클래스에 정의 된 함수입니다.
  • 클래스 변수 : 클래스 변수는 인스턴스 객체를 통해 일반적이다. 및 클래스 변수는 클래스 함수 본문 외부에서 정의. 클래스 변수는 일반적으로 인스턴스 변수로 사용되지 않습니다.
  • 데이터 멤버 : 데이터를 처리하기위한 클래스 변수 또는 인스턴스 변수 클래스와 관련된 객체 인스턴스.
  • 방법은 우선 : 서브 클래스가 부모 클래스에서 상속 당신이 요구를 충족 할 수없는 경우도 최우선 방법으로 알려져,이 프로세스는 방법 (재정의) 취재라고 쓸 수있다.
  • 지역 변수 : 과정, 클래스의 현재 인스턴스의 역할에 정의 된 변수.
  • 변수의 예 : 클래스 선언은 속성 변수를 나타낸다. 이 변수는 인스턴스 변수라고하지만, 문은 클래스 선언 내부의 클래스 메소드의 다른 구성원에 추가됩니다.
  • 상속 : 즉, 파생 클래스 (클래스가 유도) 기본 클래스 (기본 클래스) 필드 및 메소드를 상속한다. 상속은 또한 처리 된 기본 클래스 객체로 파생 클래스 오브젝트를 허용한다. 개체 유형은 아날로그 인 동물 개 클래스에서 파생 된 "인 (-A 임)"의 관계 (도 예, 동물 개) : 예를 들어,이 같은 디자인이다.
  • 인스턴스화 : 클래스, 특정 개체 클래스의 인스턴스를 만듭니다.
  • 대상 : 클래스에 의해 정의 된 데이터 구조의 예. 두 데이터 객체 부재 (인스턴스 변수와 클래스 변수) 및 방법을 포함한다.

클래스 변수 : 클래스 변수는 인스턴스 객체를 통해 일반적이다. 및 클래스 변수는 클래스 함수 본문 외부에서 정의. 클래스 변수는 일반적으로 인스턴스 변수로 사용되지 않습니다.

class MyClass:

    i = 12345       #类变量
    def f(self):
        return 'hello world'

라는 클래스가 __init의 __ () 클래스가 인스턴스화 될 때 다음과 같이 자동으로 호출됩니다 특별한 방법 (생성자) :

def __init__(self):
    self.data = []

일반 함수와 클래스 하나의 특정 차이의 메소드 - 그 이름 자체입니다 습관적으로 그들은 여분의 첫 번째 매개 변수의 이름이 있어야합니다.
클래스 내에서 데프 키워드 매개 변수 자체를 포함해야 함수, 클래스 메소드의 일반적인 정의는 다른 방법을 정의하고, 첫 번째 매개 변수이며, 자아의 대표 클래스의 인스턴스입니다.

class people:
    #定义基本属性
    name = ''
    age = 0
    #定义私有属性,私有属性在类外部无法直接进行访问,只能在类内部访问,以两个下划线打头
    __weight = 0

클래스 상속 , 파이썬은 다중 상속을 지원합니다

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()

메소드의 재정의 부모 클래스 메소드의 기능은 사용자의 요구를 충족 할 수없는 경우, 당신은 하위 클래스에서 상위 클래스 메소드를 다시 작성할 수 있습니다.

개인 재산 (두 개의 밑줄)의 등급 : __ private_attrs가 : 속성이 개인이며, 사용 또는 클래스 외부에서 직접 액세스 할 수 없습니다 선언합니다. 클래스의 내부에 사용되는 자기 .__ private_attrs는 방법.
개인 방법 (두 개의 밑줄) 클래스 : __ private_method : 방법은 개인 방법은 오직 클래스 내에서 호출 할 수 있습니다로 선언, 외부 호출 클래스에있을 수 없습니다. 자기 .__ private_methods.
(마법 방법) 클래스 (이전과 두 개의 밑줄 후) 독점 방법 :

__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

전용 파이썬 모듈 (Module1의) 클래스 (클래스)와 함수 (DEF, 람다) 새로운 범위, 코드의 다른 블록을 도입하기 전에 (예를 들어, 만약 / ELIF / 사람 /, / 시도 제외 / 동안 등) 그것은 이러한 진술의 변수 정의는 외부 액세스 할 수있는 새로운 범위를 도입하지 않습니다.

공통 기능

dec=12
bin(dec))    #十进制转二进制0b1100
oct(dec))   #十进制转八进制0o14
hex(dec))     #十进制转十六进制0xc

ord()    #字符转化为ASCII码
chr()     #ASCII码转化为字符

str.upper()       # 把所有字符中的小写字母转换成大写字母
str.lower()         # 把所有字符中的大写字母转换成小写字母
str.capitalize()     # 把第一个字母转化为大写字母,其余小写
str.title()        # 把每个单词的第一个字母转化为大写,其余小写

추천

출처www.cnblogs.com/keegentang/p/11546096.html