python基本用法筆記合集

PYTHONPATH

PYTHONPATH是python moudle的搜索路徑.即import xxx會從$PYTHONPATH尋找xxx.html

中文編碼問題

#coding=utf-8python

查看導入的包的路徑

import a_module
print(a_module.__file__)shell

map(function, iterable, ...)

參數
function -- 函數
iterable -- 一個或多個序列安全

返回值
Python 2.x 返回列表。
Python 3.x 返回迭代器。dom

>>>def square(x) :            # 計算平方數
...     return x ** 2
... 
>>> map(square, [1,2,3,4,5])   # 計算列表各個元素的平方
[1, 4, 9, 16, 25]
>>> map(lambda x: x ** 2, [1, 2, 3, 4, 5])  # 使用 lambda 匿名函數
[1, 4, 9, 16, 25]
 
# 提供了兩個列表,對相同位置的列表數據進行相加
>>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
[3, 7, 11, 15, 19]

What is :: (double colon) in Python when subscripting sequences?

https://stackoverflow.com/questions/3453085/what-is-double-colon-in-python-when-subscripting-sequences函數

It returns every item on a position that is a multiple of 3. Since 3*0=0, it returns also the item on position 0. For instance: range(10)[::3] outputs [0, 3, 6, 9]工具

每隔xxx個元素作切片ui

transpose

好比img是h*w*c維(h是第0維,w是第1維,c是第2維)的矩陣. 在通過transpose((2,0,1))後變爲c*h*w的矩陣編碼

enumerate

>>>seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))       # 下標從 1 開始
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

range(start, stop[, step])

  • start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價於range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,默認爲1。例如:range(0, 5) 等價於 range(0, 5, 1)
>>>range(10)        # 從 0 開始到 10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(1, 11)     # 從 1 開始到 11
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> range(0, 30, 5)  # 步長爲 5
[0, 5, 10, 15, 20, 25]
>>> range(0, 10, 3)  # 步長爲 3
[0, 3, 6, 9]
>>> range(0, -10, -1) # 負數
[0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
>>> range(0)
[]
>>> range(1, 0)
[]

super(type[, object-or-type])

詳細地看:http://www.runoob.com/python/python-func-super.html
命令行

簡單地說就是爲了安全地繼承.記住怎麼用的就好了.不必深究.

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class A(object):   # Python2.x 記得繼承 object
    def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super(B, self).add(x)
b = B()
b.add(2)  # 3

print

print('name: "%s"' % props['name'],fp) //把字符串寫入文件fp

random用法

random.choice(sequence)

https://pynative.com/python-random-choice/

  • random.choice 選中一個
  • random.sample(sequence,k=) 選中多個
import random
path = "/home/train/disk/data/yulan_park_expand"
random.choices([x for x in os.listdir(path)
               if os.path.isfile(os.path.join(path, x))],k=2000)

shell 工具

from shutil import copyfile

copyfile(src, dst)

參數解析

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('num1',type=int,help="img numbers to random")
parser.add_argument('num2',type=int,help="img numbers to random")
args = parser.parse_args()

命令行參數不帶'-'開頭的,就是相似於佔位符,按順序賦值. 好比python xxx.py 1 2則args.num1=1,args.num2=2. python xxx.py 2 1則args.num1=2,args.num2=1.

def arg_parse():
    parser = argparse.ArgumentParser()
    parser.add_argument('-d','--dir',type=str,default='./data',required='True',help='dir store images/label file')
    parser.add_argument('-o','--output',type=str,default='./outdata.tfrecord',required='True',help='output tfrecord file name')

    args = parser.parse_args()
    
    return args
  • -d --dir說明命令行上傳參用法.
  • type說明參數數據類型
  • default說明默認值
  • required說明是否爲必選參數
  • help是參數的說明

類名直接調用

以前在pytorch和keras中常常發現一個類model被直接調用,發現頗有意思。因而就去看了看pytorch中nn.Module的源碼,發現是定義了__call__(self)函數再去調用forward()函數。舉個例子以下:

import math
class Pow(object):
    def __init__(self,n=2):
        self.n=n
        super(Pow,self).__init__()
    def forward(self,x):
        return math.pow(x,self.n)
    def __call__(self,x):
        return self.forward(x)
l=Pow(2)
y=l(10)
print(y)  #輸出結果是100
l=Pow(3)
y=l(10)
print(y)  #輸出結果是1000

os模塊

os.walk

#!/usr/bin/python
# -*- coding: UTF-8 -*-

import os
for root, dirs, files in os.walk(".", topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))

#!/usr/bin/env python與#!/usr/bin/python的區別

腳本語言的第一行,目的就是指出,你想要你的這個文件中的代碼用什麼可執行程序去運行它,就這麼簡單

同時對2個list作相同的亂序操做

import random

a = ['a', 'b', 'c']
b = [1, 2, 3]

c = list(zip(a, b))

random.shuffle(c)

a, b = zip(*c)

print a
print b

[OUTPUT]
['a', 'c', 'b']
[1, 3, 2]

yield用法

yield在函數中的功能相似於return,不一樣的是yield每次返回結果以後函數並無退出,而是每次遇到yield關鍵字後返回相應結果,並保留函數當前的運行狀態,等待下一次的調用。若是一個函數須要屢次循環執行一個動做,而且每次執行的結果都是須要的,這種場景很適合使用yield實現。
包含yield的函數成爲一個生成器,生成器同時也是一個迭代器,支持經過next獲取下一個值。
yield基本使用:

def func():
    for i in range(0,3):
        yield i
 
f = func()
print(next(f))

for i in f:
    print(i)

輸出

0
1
2
相關文章
相關標籤/搜索