主頁 > 移動端開發 > Python常用基礎知識點

Python常用基礎知識點

2020-09-18 23:16:26 移動端開發

Python基礎

環境搭建

Python的運行環境

  • 從官網下載相應版本,下載
  • 安裝anaconda,下載
  • 使用docker
  • 安裝pypy,官網

Python包管理

  • 直接使用pip
  • 使用conda
  • 使用虛擬環境
  • 使用景象加速(https://pypi.tuna.tsinghua.edu.cn/simple)
創建一個stenv目錄,然后進入到stenv目錄
創建虛擬環境
python3 -m venv .
激活虛擬環境
source bin/activate #windows中直接執行activate.bat
這虛擬環境就創建完成
退出虛擬環境
終端執行命令:deactivate

將Python運行起來

  • 使用終端
  • 直接作為腳本
  • 在編譯器運行
  • 打包為可執行程式 (pyinstaller -F source)

基礎語法

快速入門

'''
基本命名方式
module_name,  模塊
package_name,  包
ClassName,  類 駝峰
method_name,  方法
ExceptionName,   例外
function_name,  函式 下劃線
GLOBAL_VAR_NAME, 全域變數
instance_var_name,  實體
function_parameter_name,   引數
local_var_name.  本變數
'''

"""
關鍵字
and	exec	not
assert	finally	or
break	for	pass
class	from	print
continue	global	raise
def	if	return
del	import	try
elif	in	while
else	is	with
except	lambda	yield
"""

#基本變數

a = 3
b = 3.5
c = "hello"
d = ['1',123,3.5]

#條件判斷,使用4個空格縮進,不使用tab
if a == 3:
    print("a is 3")
else:
    print("a is not 3")

#回圈
for i in range(3):
    print(i)

#函式
def add(a,b):
    """
    實作兩個數相加
    :param a: 加數
    :param b: 被加數
    :return: 回傳相加結果
    """
    return a + b

#類
class StMath(object):
    """
    實作數學計算的類
    """
    def __init__(self,a_in):
        """
        初始化方法
        :param a_in: 初始化數值
        """
        super().__init__()
        self.a = a_in

    def add(self,B):
        """
        實作兩個math物件相加
        :param B: 被加math物件
        :return: 相加結果
        """
        return StMath(self.a + B.b)

基本型別

數字型別

高精度!高精度!高精度!重要的事說三遍

字串

基本操作


#增刪改查

content = "abcxabcyabc"

print(content+"123")
print(content[:2]+content[4:])
print(content.replace("abc","python"))
print(re.sub("abc","python",content)) #使用正則運算式替換
print(content.find("xyz",2)) #或"xyz" in content
print(re.findall("abc",content))

編碼問題

python3中,文本總是Unicode,由str型別表示,二進制資料則由bytes型別表示,Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰,你不能拼接字串和位元組包,也無法在位元組包里搜索字串

一個亂碼問題演示

"你好".encode("utf-8").decode("gbk")
#str,bytes再一個事例
"你好".encode("unicode-escape").decode()
ord('你')

List

list具有范型特征(講完物件再回顧排序)

#增刪改查
a = [1,2,3,4,5,6,7]
#增加元素
a.append(8)
#洗掉元素
a.remove(3)
#查找元素
a.index(6)
#修改元素
a[4] = 10
#切片操作,會忽略結束元素
a[2:5] #注意不會包括索引5的元素
a[::-1] #反序操作

#便利操作
for v in a:
	print(v)

#如果屬性要索引
for i,v in enumerate(a):
    print(i,v)


字典

#增刪改查
stu_dict = {"name":"jack","age":21,"socre":100}
#增加
stu_dict["phone"] = "18000000000"
#洗掉
del stu_dict["phone"]
#修改
stu_dict["name"] = "lucy" #stu_dict.update({})
#查詢
stu_dict.get("name") #和stu_dict["name"]區別

使用函式

函式是python的一等公民,變為:

  • 運行時創建
  • 能賦值
  • 能傳參
  • 能回傳

函式的引數

不可變物件

str,int,number都是不可變物件,采用值傳遞

a = 20

def change_value(x):
    x = 100

change_value(a)
print(a) #結果仍然是20

可變物件

list,dict是可變物件,采用參考傳遞

def change_list(x):
    x.append(20)

y = [1,2,3]
change_list(y)
print(y) # 結果是1,2,3,20

定位引數和關鍵字引數

定位引數必須按照次序,關鍵字引數可以任意打亂次序,可以賦默認值

def extract_content(tag_name,start_pos = 20)
		print("tag_name is ::::::",tag_name)

*args, **karges

使用args和kargs傳入不定長引數,args捕獲的定位引數被組織為元組,kargs捕獲的引數被組織為字典

def extract_content(*args,**kargs):
    print(args)
    print(kargs)

extract_content("a",3.5,[1,2,3],name="jack",age="22")

陣列加上*號傳入會被args解包后逐個捕獲

list_args = [1,2,3,4,5,6]
extract_content(*list_args)

函式的注解

可以給引數和回傳值附加元資料,對于復雜資料支持的時候可以提高易讀性,提升開發效率,Python自身不做檢查不做校驗,不會對程式的行為產生影響,僅僅是一種約定

def add(add_a:int,add_b:int) -> int:
    return add_a + add_b

print(add(10,20))

變數的作用閾

全域作用域與區域作用域

#下面的代碼錯在什么地方?使用global糾正
m = 10
def show_diff():
    print("********show_diff*********")
    global
    n = 20
    print(m)
    m = 90
    print(n)

函式和閉包


#函式和閉包
def create_sum():
    sum = 0
    def sum_all(a_in):
        nonlocal sum
        sum += a_in
        return sum
    return sum_all

s_custom = create_sum()
#本質是什么
#print(s_custom.__closure__[0].cell_contents)
print(s_custom(10))
print(s_custom(20))
print(s_custom(30))

如何做為一等公民?

可以賦值

p = add
print(p(10,20))

可以作為引數傳遞(linux,spring設計)

def download_url(url_str,extract_rule):
    print("下載了某個網頁")
    result = "<html><head><a href='//www.baidu.com'></a></head></html>"
    urls = extract_rule(result)
    print("頁面的所有地址是:",urls)

def normal_url_rule(result):
    return re.findall("<a\s+href=\'(.*?)\'",result)

def no_http_url_rule(result):
    origin_url = re.findall("<a\s+href=\'(.*?)\'",result)
    return ["http:"+ url for url in origin_url]

download_url("",no_http_url_rule)

做為回傳值

def math_rule():
    def rule(a,b):
        return a+b

    return rule


rule = math_rule()
print(rule(20,30))

裝飾器

裝飾器的本質,函式的嵌套呼叫

import time

#裝飾器
def download_html():
    time.sleep(1)
    print("執行了下載操作")



def record_time(download_func):
    def record_wrapper():
        start_time = time.time()
        download_func()
        end_time = time.time()
        print("下載經過了時間",end_time - start_time)
    return record_wrapper


decorate_download = record_time(download_html)
decorate_download()

使用語法糖,更直觀的使用體驗:

@record_time
def download_html():
    time.sleep(1)
    print("執行了下載操作")


download_html()

裝飾器中傳遞引數:

def record_time(level):
    def decorate(download_func):
        def record_wrapper(*args,**kargs):
            print("下載網址是:",args)
            print("日志等級是",level)
            start_time = time.time()
            download_func()
            end_time = time.time()
            print("下載經過了時間",end_time - start_time)
        return record_wrapper
    return decorate


@record_time(level=9)
def download_html():
    time.sleep(1)
    print("執行了下載操作")

面向物件

面向物件的基本特點,封裝、繼承、多型,抽象用來設計類的層次結構

面向物件基礎

self,方法重寫,@classmethod @staticmethod,內置方法重寫

class Person(object):
    """
    定義抽象基類
    """
    def __init__(self,score):
        self.score = score
        self.__name = "jack" #加上兩個下劃線,表示私有方法

    @classmethod
    def from_file(cls,file_name):
        """
        從檔案讀取學生成績
        :param file_name: 檔案名
        :return:
        """
        score = open("score.txt").read()
        return cls(score)

    @staticmethod
    def extract_address():
        return "no.90"

    def run(self):
        print("person run!!!!")


    def __add__(self, other):
        return Student(self.score + other.score)


class Student(Person):
    """
    學生資訊類
    """
    def __init__(self,score):
        super().__init__(score)

    def ask(self):
        print("ask a question!!")

    def run(self):
        super().run()
        print("student run!!",self.score)

# p = Person(85)
# p.run()

s = Student.from_file("test.txt")
print(Student.extract_address())
s.run()

抽象層構建

抽象基類中的抽象方法必須在子類中實作,否則子類無法實體化,

#抽象介面
from abc import ABC,abstractmethod

class Person(ABC):
    """
    定義抽象基類
    """
    def __init__(self):
        pass

    @abstractmethod
    def run(self):
        pass

class Student(Person):
    def __init__(self):
        super().__init__()

    def ask(self):
        print("ask a question!!")

    def run(self):
        print("run run run1!!")

動態特性

運行程序中動態判斷屬性,設定屬性,可以結合組態檔靈活實作類的加載,修改

  • hasattr
  • setattr
  • hasattr
package = __import__('st_python_base')
student_class = getattr(package,'Student')

s = student_class(90)
s.run()

當出現未知訪問屬性的時候,進行處理

 def __getattr__(self, item):
         print('getattr')

記憶體管理

關于參考計數

import weakref
def over():
    print("student is over!!!")
    
x = st_python_base.Student(10)
ender = weakref.finalize(x,over)

y = x

關于深復制和淺復制

注意直接賦值,copy,deepcopy的區別?

from copy import copy
from copy import deepcopy

class Student(object):

    def __init__(self):
        self.course = [1,2,3,4,5]
        self.name = "jack"


s1 = Student()
s2 = deepcopy(s1)

s1.course.append(12)
print(s2.course)

背景關系管理

with…as…的本質

class StTools(object):

    def __enter__(self):
        print("進入背景關系塊,,,,")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("從背景關系塊退出")

    def make_sign(self):
        print("test!!!")



with StTools() as st:
    st.make_sign()

關于迭代器和生成器

理解yield和send

def s():
    print('begin test')
    a = yield 10
    print(a)
    b = yield 20
    print('end test!')

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/77164.html

標籤:其他

上一篇:求助,安卓activity的title怎么沒了

下一篇:vlc如何設定視頻回圈播放

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:40:31 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:40:11 more
  • 歡迎頁輪播影片

    如圖,引導開始,球從上落下,同時淡入文字,然后文字開始輪播,最后一頁時停止,點擊進入首頁。 在來看看效果圖。 重力球先不講,主要歡迎輪播簡單實作 首先新建一個類 TextTranslationXGuideView,用于影片展示 文本是類似的,最后會有個圖片箭頭影片,布局很簡單,就是一個 TextVi ......

    uj5u.com 2023-04-20 08:39:36 more
  • 【FAQ】關于華為推送服務因營銷訊息頻次管控導致服務通訊類訊息

    一. 問題描述 使用華為推送服務下發IM訊息時,下發訊息請求成功且code碼為80000000,但是手機總是收不到訊息; 在華為推送自助分析(Beta)平臺查看發現,訊息發送觸發了頻控。 二. 問題原因及背景 2023年1月05日起,華為推送服務對咨詢營銷類訊息做了單個設備每日推送數量上限管理,具體 ......

    uj5u.com 2023-04-20 08:39:13 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:16:23 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:16:15 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:15:46 more
  • iOS從UI記憶體地址到讀取成員變數(oc/swift)

    開發除錯時,我們發現bug時常首先是從UI顯示發現例外,下一步才會去定位UI相關連的資料的。XCode有給我們提供一系列debug工具,但是很多人可能還沒有形成一套穩定的除錯流程,因此本文嘗試解決這個問題,順便提出一個暴論:UI顯示例外問題只需要兩個步驟就能完成定位作業的80%: 定位例外 UI 組 ......

    uj5u.com 2023-04-19 09:14:53 more
  • FIDE重磅更新!性能飛躍!體驗有禮!

    FIDE 開發者工具重構升級啦!實作500%性能提升,誠邀體驗! 一直以來不少開發者朋友在社區反饋,在使用 FIDE 工具的程序中,時常會遇到諸如加載不及時、代碼預覽/渲染性能不如意的情況,十分影響開發體驗。 作為技術團隊,我們深知一件趁手的開發工具對開發者的重要性,因此,在2023年開年,FinC ......

    uj5u.com 2023-04-19 09:14:08 more
  • 游戲內嵌社區服務開放,助力開發者提升玩家互動與留存

    華為 HMS Core 游戲內嵌社區服務提供快速訪問華為游戲中心論壇能力,支持玩家直接在游戲內瀏覽帖子和交流互動,助力開發者擴展內容生產和觸達的場景。 一、為什么要游戲內嵌社區? 二、游戲內嵌社區的典型使用場景 1、游戲內打開論壇 您可以在游戲內繪制論壇入口,為玩家提供沉浸式發帖、瀏覽、點贊、回帖、 ......

    uj5u.com 2023-04-19 09:08:34 more