日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

总复习(一)

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 总复习(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

  • 0524總復習
  • 計算機之編程
    • 什么是編程語言
    • 什么是編程
    • 為什么要編程
  • 計算機組成原理
    • 計算機五大組成
      • CPU
      • 內存
      • 外存
      • 輸入設備
      • 輸出設備
      • I/O設備
    • 32位和64位
      • 32位
      • 64位
    • 多核CPU
    • 硬盤工作原理
      • 機械硬盤工作原理
      • 固態硬盤工作原理
  • 計算機操作系統
    • 文件是什么?
    • 應用程序是什么?
    • 操作系統能干什么?
    • 計算機三大組成?
      • 應用程序
      • 操作系統
      • 硬件
      • 應用程序的啟動和操作系統的啟動?
  • 編程語言分類
    • 機器語言
    • 匯編語言
    • 高級語言
      • 解釋型語言
      • 編譯型語言
  • 執行Python程序的兩種方式
    • 交互式
    • 命令行式
  • 執行Python程序的兩種IDE
    • Pycharm
    • Jupyter
  • 變量
    • 什么是變量?
    • 變量的組成?
    • 變量名的定義規范
    • 定義變量的兩種方式
    • 常量
    • 注釋
      • 單行注釋
      • 多行注釋
    • 引用計數
    • 垃圾回收機制
    • 小整數池
  • 與用戶交互
  • input
  • 格式化輸出
    • 占位符
    • format格式化
    • f-string格式化
  • 基本運算符
    • 算術運算符
    • 邏輯運算符
    • 比較運算符
    • 賦值運算符
    • 身份運算符
    • 運算符優先級(略)
    • 鏈式賦值
    • 交叉賦值
    • 解壓縮
  • 流程控制
    • 流程控制之if判斷
      • if
      • if...else
      • if...elif....elif...else
    • 流程控制之while循環
      • while
      • while + break
      • while + continue
      • while + else
    • 流程控制之for循環
      • for
      • for + break
      • for + continue
      • for + else
  • 數據類型內置方法
    • 數字類型內置方法
      • 整型
      • 浮點型
    • 字符串類型內置方法
    • 列表類型內置方法
    • 元祖類型內置方法
    • 字典類型內置方法
    • 集合類型內置方法
    • 布爾類型
    • 數據類型總結
    • 拷貝
    • 淺拷貝
    • 深拷貝
  • 0531總復習
  • 數據類型內置方法
    • 整形類型內置方法
    • 浮點型類型內置方法
    • 字符串類型內置方法
      • 優先掌握
      • 需要掌握
      • 了解
    • 列表類型內置方法
      • 優先掌握
      • 需要掌握
    • 元組類型內置方法
      • 優先掌握
    • 字典類型內置方法
      • 優先掌握
      • 需要掌握
    • 集合類型內置方法
      • 優先掌握
      • 需要掌握
  • 數據類型總結
    • 可變or不可變
    • 有序or無需
    • 存一個值or多個值
    • 拷貝
    • 淺拷貝
    • 深拷貝
  • 字符編碼
    • Python3解釋器編碼
  • 文件操作
    • 打開文件的流程
    • with管理上下文
    • 打卡文件的三種模式
    • 同時打開兩個文件
      • 文件復制
    • 打開文件file后,file的方法
  • 函數
    • 定義函數
    • 函數的三種形式
    • 調用函數
    • 函數的返回值
    • 函數的參數
      • 形參:接受實參,具有某種描述意義,但沒有具體的值
      • 實參:具有具體的值
    • 可變長參數
      • *
      • **
    • 函數對象
    • 函數嵌套
    • 名稱空間與作用域
      • 可變的作用域事項(了解)
    • 閉包函數
    • 裝飾器
      • 無參裝飾器
      • 有參裝飾器

0524總復習

計算機之編程

什么是編程語言

編程語言是人與計算機交流的介質

什么是編程

編程就是使用編程語言編寫一個個文件

為什么要編程

為了奴隸計算機,解放勞動力,幫人類完成一個個具體的任務

計算機組成原理

計算機五大組成

CPU

控制器

控制硬件

運算器

進行邏輯運算+算術運算

內存

臨時存儲數據的硬件

  • 優點(相比較于外存):速度快
  • 缺點(相比較于外存):臨時存儲/斷電即消失

外存

永久存儲數據的硬件

  • 優點(相比較于內存):永久存儲
  • 缺點(相比較于內存):速度慢

輸入設備

輸入信息的硬件,如鍵盤/鼠標/u盤

輸出設備

輸出信息的硬件,如顯示器/打印機/u盤

I/O設備

即可輸入信息,又可以輸出信息的硬件,稱為I/O設備

32位和64位

32位

一次性能讀取32個二進制位的操作系統

64位

一次性能讀取64個二進制位的操作系統

多核CPU

可以同時完成多件事的CPU,如4核CPU則一個大的CPU集成了4個小的CPU

硬盤工作原理

機械硬盤工作原理

  • 機械手臂:尋找數據
  • 磁道:存儲數據
  • 扇區:劃分磁道
  • 平均尋道時間:由于工業水平的限制,為5ms
  • 平均延遲時間:以7200r/min的硬盤為例,為4.15ms

$$
7200(r/min) / 60 = 120(r/s) \
1/120(r/s) = 0.0083s = 8.3ms \
8.3 / 2 = 4.15ms \
$$

  • 平均尋找數據時間:5+4.15=9.15ms

固態硬盤工作原理

  • 基于算法和電存儲的外存

計算機操作系統

文件是什么?

操作系統提供的一個虛擬的單位

應用程序是什么?

應用程序其實就是一堆文件,用來完成具體的某個任務

操作系統能干什么?

接受應用程序/人的外部指令,然后控制硬件

計算機三大組成?

應用程序

應用程序其實就是一堆文件,用來完成具體的某個任務,與人/操作系統交互

操作系統

接受應用程序/人的外部指令,然后控制硬件,與人/應用程序/硬件交互

硬件

最終的目的是用來存儲數據,與操作系統交互

應用程序的啟動和操作系統的啟動?

應用程序的啟動

  • 雙擊qq(發送指令給操作系統)
  • 操作系統接收指令,將指令轉化成0和1發送給CPU
  • CPU接收指令,發送給內存
  • 內存從硬盤中取出qq的程序,執行,打開qq
  • 操作系統的啟動

  • 按下開機鍵(啟動一個臨時操作系統)
  • 臨時操作系統喚醒真正的操作系統
  • 編程語言分類

    機器語言

    • 優點(匯編語言):執行效率高
    • 缺點(匯編語言):開發效率低

    匯編語言

    • 優點(機器語言):開發效率高
    • 缺點(機器語言):執行效率低

    高級語言

    解釋型語言

    類似于同聲傳譯,寫一句翻譯一句

    • 優點(編譯型語言):開發效率高
    • 缺點(編譯型語言):執行效率低

    編譯型語言

    類似于谷歌翻譯,寫完所有的代碼,一次性編譯后得到結果,并且結果可以保存,無法得到及時的報錯反饋

    • 優點(解釋型語言):執行效率高
    • 缺點(解釋型語言):開發效率低

    執行Python程序的兩種方式

    交互式

    在終端內輸入python3,然后輸入python代碼

    命令行式

    在終端內輸入python3 文本文件路徑

    執行Python程序的兩種IDE

    Pycharm

    Jupyter

    變量

    什么是變量?

    變量一般用來用來描述世間萬物變化的狀態

    變量的組成?

    變量名 = 變量值

    • ==變量名是用來接收變量值的==

    變量名的定義規范

  • 變量名具有某種意義
  • 由數字/字母/下劃線組成,且不能由數字開頭,(也不能由下劃線開頭)
  • 不能用Python關鍵字
  • ['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

    定義變量的兩種方式

    • 駝峰體:NameOfNick
    • 下劃線:name_of_nick(推薦)

    常量

    常量是約定俗成的一種規范,常量名的定義方式為全大寫.實際上可以被修改.

    注釋

    單行注釋

    #注釋的語句,#后面的字符不執行語法,即只為普通字符,一般用來解釋某一段代碼

    多行注釋

    三單引號/三雙引號

    引用計數

    變量值的引用次數

    x = 257 # 257的引用計數為1 y = x # 257的引用計數為2 del x # 257的引用計數為1

    垃圾回收機制

    當變量值的引用計數為0的時候,該變量值會被Python自動回收它的內存占用

    小整數池

    [-5,256]之間的整數會在Python解釋器啟動的時候,自動開辟一塊內存存入這些整數.也就是說這些整數不會因為引用計數為0而被刪除

    與用戶交互

    input

    input輸入的都是字符串形式

    格式化輸出

    占位符

    %s接收任意數據類型的數據
    %d接收數字類型的數據

    name = 'nick''nick name is %s'%name

    format格式化

    {}接收任意數據類型的數據

    name = 'nick''nick name is {}'.format(name)

    f-string格式化

    在字符串前面加上f或F,然后使用{}接收任意數據類型的數據

    name = 'nick'f'nick name is {name}'

    基本運算符

    算術運算符

    + - * / % // **

    邏輯運算符

    and or not

    比較運算符

    > >= < <= == !=

    賦值運算符

    = += -= *= /= //= **= %=

    身份運算符

    is is not

    • id相同的值一定相同,值相同的id不一定相同

    運算符優先級(略)

    如果需要某個運算符優先運算,則加個括號,使用a and b is c == d的是傻逼

    鏈式賦值

    x = y = z = 10

    交叉賦值

    # 交叉賦值 x = 10 y = 20x, y = y, xprint(x, y)# 使用臨時變量 x = 10 y = 20 temp = x x = y y = tempprint(x, y)

    解壓縮

    hobby_list = ['read','run','sleep','fishing','piao']# 如果取第2-3個愛好_,hobby2,hobby3,*_ = hobby_listprint(hobby2, hobby3)

    流程控制

    流程控制之if判斷

    if

    if 條件:代碼塊

    if...else

    if 條件:代碼塊 else:代碼塊

    if...elif....elif...else

    if 條件:代碼塊 elif 條件: 代碼塊 elif 條件:代碼塊...(可以寫任意個elif)else:代碼塊

    流程控制之while循環

    while

    while 條件:代碼塊

    while + break

    while 條件:代碼塊break # 結束本層循環,跳出循環

    while + continue

    while 條件:代碼塊if 條件:代碼塊cotinue # 不執行下面代碼,然后繼續循環,即跳出本次循環代碼塊

    while + else

    while 條件:代碼塊 else:print('如果我沒有被break,我就會被打印出來')

    流程控制之for循環

    for

    for i in range/str/list/tuple/dict/set(可迭代對象):print(i)

    for + break

    for i in range/str/list/tuple/dict/set(可迭代對象):print(i)break # 結束本層循環

    for + continue

    for i in range/str/list/tuple/dict/set(可迭代對象):print(i)if 條件:continue # 結束本次循環,即不執行下面代碼,繼續循環代碼塊

    for + else

    for i in range/str/list/tuple/dict/set(可迭代對象):print(i) else:print('如果我沒有被break,我就會被打印出來')

    數據類型內置方法

    數字類型內置方法

    整型

  • 作用:定義年齡/身高/體重/id號
  • 定義方式:
  • age = 18 age = int('18')
  • 方法: + - * / % // **
  • 多個值or一個值:一個值
  • 有序or無序:壓根沒有有序無序這一說
  • 可變or不可變:不可變
    • 可變:值變id不變,值變id也變

    浮點型

  • 作用:定義薪資/價格
  • 定義方式:
  • salary = 3.2salary = float('3.2')
  • 方法:+ - * / % // **
  • 多個值or一個值:一個值
  • 有序or無序:壓根沒有有序無序這一說
  • 可變or不可變:不可變
  • 字符串類型內置方法

  • 作用:姓名/
  • 定義方式:
  • name = 'nick' name = "nick" name = ''' nick nick ''' name = """ nick nick """ name = "'nick'" name = '"nick"'
  • 方法
  • 優先掌握
  • 索引取值
  • 切片
  • 長度
  • 切分split
  • 除兩邊空白strip
  • 成員運算in&emsp;not in
  • for循環
  • 需要掌握
  • lstrip/rstrip
  • rsplit
  • upper/lower
  • startstwith/endswith
  • join
  • replace
  • isdigit
  • 了解
  • find/rfind/index/rindex/count
  • center/ljust/rjust/zfill
  • expantabs
  • capitalize/swapcase/title
  • is系列
  • 多個值or一個值:一個值
  • 有序or無序:有序
  • 可變or不可變:不可變
  • 列表類型內置方法

  • 作用:多個女朋友/
  • 定義方式:[]內用逗號隔開多個任意數據類型的元素
  • friends_list = ['longzeluola','canglaoshi','qiaobenai','nick'] lis = list('abcd')
  • 方法:
  • 優先掌握
  • 索引取值(即可取又可改)
  • 切片
  • 長度
  • append
  • 成員運算
  • for循環
  • 需要掌握
  • count
  • remove
  • reverse
  • pop
  • insert
  • sort
  • index
  • del
  • extend
  • clear
  • 多個值or一個值:多個值
  • 有序or無序:有序
  • 可變or不可變:可變
  • 元祖類型內置方法

  • 作用:類似于列表,可以取不可以存
  • 定義方式:
  • friends_tuple = ('longzeluola','canglaoshi','qiaobenai','nick') tup = tuple('abcd')
  • 方法
  • 優先掌握
  • 索引取值(無法更改)
  • 切片
  • 長度
  • 成員運算
  • for循環
  • count
  • index
  • 多個值or一個值:多個值
  • 有序or無序:有序
  • 可變or不可變:無可變不可變這一說
  • 字典類型內置方法

  • 作用:值太多列表存容易,取麻煩時使用字典
  • 定義方式:
  • nick_info_dict = { 'name':'nick', 'height':180, 'weight':140, 'hobby_list':['read','run','music','fishing','programming','coding','debugging'] }for k,v in nick_info_dict.items():print(k,v)
  • 方法
  • 優先掌握
  • 按鍵取值
  • 長度
  • keys/values/items
  • for循環
  • 成員運算
  • 需要掌握
  • pop
  • fromkeys
  • setdefault
  • get
  • update
  • del
  • 多個值or一個值:多個值
  • 有序or無序:無序
  • 可變or不可變:可變
  • 集合類型內置方法

  • 作用:存多個值,為了集合之間做運算
  • 定義方式:
  • s = set()s = {1,2,3,4,5,1}
  • 方法:
  • 優先掌握
  • 去重
  • 并集 |
  • 交集 &
  • 差集 -
  • 對稱差集 ^
  • 父集 >&emsp;>=
  • 子集 <&emsp;<=
  • ==
  • 需要掌握
  • add
  • difference_update
  • isdisjoint
  • remove # 值不存在會報錯
  • discard # 不會報錯
  • 多個值or一個值:多個值
  • 有序or無序:無序
  • 可變or不可變:可變
  • 布爾類型

  • 作用:一般用于判斷,除了0/None/空/False自帶布爾值為False,其他的數據類型自帶布爾值為True
  • 數據類型總結

    一個值多個值
    整型/浮點型/字符串列表/元祖/字典/集合/
    有序無序
    字符串/列表/元祖字典/集合
    可變不可變
    列表/字典/集合整型/浮點型/字符串

    拷貝

    • ==拷貝/淺拷貝/深拷貝都是針對可變類型數據而言的==
    l1 = ['a','b','c',['d','e','f']] l2 = l1l1.append('g')print(l1) # ['a','b','c',['d','e','f'],'g'] print(l2) # ['a','b','c',['d','e','f'],'g']

    如果l2是l1的拷貝對象,則l1內部的任何數據類型的元素變化,則l2內部的元素也會跟著改變,因為可變類型值變id不變

    淺拷貝

    import copyl1 = ['a','b','c',['d','e','f']] l2 = copy.copy(l1)l1.append('g')print(l1) # ['a','b','c',['d','e','f'],'g'] print(l2) # ['a','b','c',['d','e','f']]l1[3].append('g')print(l1) # ['a','b','c',['d','e','f','g'],'g'] print(l2) # ['a','b','c',['d','e','f','g']]

    如果l2是l1的淺拷貝對象,則l1內的不可變元素發生了改變,l2不變;如果l1內的可變元素發生了改變,則l2會跟著改變

    深拷貝

    import copyl1 = ['a','b','c',['d','e','f']] l2 = copy.deepcopy(l1)l1.append('g')print(l1) # ['a','b','c',['d','e','f'],'g'] print(l2) # ['a','b','c',['d','e','f']]l1[3].append('g')print(l1) # ['a','b','c',['d','e','f','g'],'g'] print(l2) # ['a','b','c',['d','e','f']]

    如果l2是l1的深拷貝對象,則l1內的不可變元素發生了改變,l2不變;如果l1內的可變元素發生了改變,l2也不會變,即l2永遠不會因為l1的變化而變化

    age = 18 # 答案 count = 0 # 游戲次數控制 prize_dict = {0:'布娃娃',1:'變形金剛',2:'奧特曼',3:'<Python從入門到放棄>' }# 核心代碼 while count < 3:inp_age = input('請輸入你的年齡>>>').strip() # 與用戶交互# 判斷用戶是否騷擾if not inp_age.isdigit():print('傻逼,你的年齡輸錯了')continueinp_age_int = int(inp_age)# 核心邏輯,判斷年齡if inp_age_int == age:print('猜對了')print(prize_dict) # 打印獎品# 獲取兩次獎品for i in range(2):prize_choice = input('請輸入你想要的獎品,如果不想要,則輸入"n"退出!!!').strip() # 與用戶交互獲取獎品# 判斷是否需要獎品if prize_choice != 'n':print(f'恭喜你獲得獎品: {prize_dict[int(prize_choice)]}')else:breakbreakelif inp_age_int < age:print('猜小了')else:print('猜大了')count += 1 # 成功玩一次游戲if count != 3:continueagain_choice = input('是否繼續游戲,繼續請輸入"Y",否則任意鍵直接退出.').strip() # 交互是否再一次# 判斷是否繼續if again_choice == 'Y':count = 0

    0531總復習

    數據類型內置方法

    整形類型內置方法

    + - * / // % **

    浮點型類型內置方法

    + - * / // % **

    字符串類型內置方法

    優先掌握

  • 索引取值
  • 切片
  • 切割split
  • 長度
  • 成員運算
  • 去除空白strip
  • for循環取值
  • 需要掌握

  • lstrip/rstrip
  • rsplit
  • upper/lower
  • startswith
  • endswith
  • isdigit
  • join
  • replace
  • 了解

  • find/rfind/index/rindex/count
  • center/ljust/rjust/zfill
  • swapcase/capitalize/title
  • extendtaps
  • is系列
  • 列表類型內置方法

    優先掌握

  • 索引取值,索引更改值
  • 切片
  • 長度
  • 成員運算
  • append
  • del
  • for循環
  • 需要掌握

  • insert
  • index
  • sort
  • remove
  • extend
  • count
  • pop
  • clear
  • copy
  • reverse
  • 元組類型內置方法

    優先掌握

  • 索引取值
  • 切片
  • 長度
  • 成員運算
  • count
  • index
  • for循環
  • 字典類型內置方法

    優先掌握

  • 按鍵取值
  • 長度
  • 成員運算
  • keys/vlaues/items
  • for循環
  • del
  • pop(隨機刪除,因為字典是無序的)
  • 需要掌握

  • fromkeys
  • get
  • update
  • setdefault
  • 集合類型內置方法

    優先掌握

  • 去重
  • 長度
  • 成員運算
  • |
  • &
  • ^
  • > >=
  • < <=
  • = =
  • 需要掌握

  • add
  • remove
  • difference_update
  • discard(不報錯)
  • isdisjoint
  • 數據類型總結

    可變or不可變

    可變不可變
    列表,字典,集合字符串,整形,浮點型

    有序or無需

    有序無序
    字符串,列表,元組字典,集合

    存一個值or多個值

    存一個值存多個值
    整型,浮點型,字符串列表,集合,字典,元組

    拷貝

    l1= [1,1] l2 = l1
    • 當l2為l1的拷貝對象時,l1發生變化,l2也會隨之發生變化

    淺拷貝

    l1 = [1,2,[1,2]] import copyl2 = copy.copy(l1)
    • 當l2為l1的淺拷貝時,l1內部的不可變元素發生變化,l2不變;l1內部的可變元素發生變化,l2也會隨著發生變化

    深拷貝

    l1 = [1,2,3,[2,3]] import copyl2 = copy.deepcopy(l1)
    • 當l2為l1的深拷貝對象時,l1內部的元素發生變換,l2都不會發生變化
    • ==拷貝/淺拷貝/深拷貝都是針對可變類型數據而言的==

    字符編碼

    • 用什么編碼寫的文件,就用什么編碼打開,unicode--》gbk 編碼encode;gbk ---》 unicode 解碼 decode

    Python3解釋器編碼

    當python3解釋器啟動,并生成變量時,會以unicode的形式把變量讀入內存,當我們使用print方法時,print會自動按照終端的字符編碼 編碼unicode形式的變量

    生成變量時以unicode丟入內存,終端時gbk,還是utf8,這終端都可以識別。
    生成變量時以utf8丟入內存,終端為utf8,可以,但是終端為gbk,不可以了。==錯誤==

    文件操作

    打開文件的流程

  • 打開文件 open
  • 讀寫文件 read/write
  • 關閉文件 close
  • with管理上下文

    with open(文件名,打開模式,編碼格式) as f:f.操作命令

    打卡文件的三種模式

  • r只讀 (默認)
  • w清空只寫
  • a追加寫入
    • t 文本模式(默認)
    • b 二進制模式

    同時打開兩個文件

    with open(文件一),open(文件二),open(文件三)……

    文件復制

    with open('a.txt','r',encoding='utf8') as fr, open('a_swap.txt','w',encoding='utf8') as fw:data = fr.read()# 做一些處理之后fw.write(data)fw.flush()import osos.remove('a.txt') os.rename('a_swap.txt','a.txt')

    打開文件file后,file的方法

  • f.read() # read(n)意味著讀幾個字符
  • f.write()
  • f.readline()
  • f.readlines() (如果取出來時for循環的話,可以for i in f)
  • f.flush()
  • f.seek()
  • f.tell()
  • f.truncate()
  • 函數

    定義函數

    def 函數名():代碼塊
    • 定義階段只檢測語法,不執行代碼

    函數的三種形式

  • 無參函數
  • 有參函數
  • 空函數
  • 調用函數

    def f1():return 2f1() f = f1()
    • 調用階段才執行代碼

    函數的返回值

    • 默認為None,如果遇到return則會終止函數,可以返回多個值(接收的時候為元組形式),并且值為任意數據類型

    函數的參數

    形參:接受實參,具有某種描述意義,但沒有具體的值

  • 位置形參:最普通的參數,從左到右接收一一對應的實參
  • 默認形參:具有默認值,必須的寫在位置形參的后面
  • 實參:具有具體的值

  • 位置實參:從左到右傳值給一一對應的形參
  • 關鍵字實參:指定參數傳給形參,必須寫在位置實參后面
  • 可變長參數

    *

  • *實參:把元組/列表打散成位置實參一個個傳給形參,類似于解壓縮
  • *形參:接收多余的位置實參,儲存為元組的形式
  • import random import timewith open('0531總復習.md','r',encodint='utf8') as fr:for i in range(50):fr.read(random.randint(1,300))time.sleep(30)

    **

  • **實參:把字典打散成關鍵字實參一個個傳給形參,
  • **形參:接收多余的關鍵字實參,存儲為字典的形式,**kwargs
  • 函數對象

    def f1():pass# 1.引用 f = f1# 2.當作返回值 def f2():return f1# 3. 當作參數傳入 def f3(func):func() f3(f1)# 4. 作為容器元素lis = [1,2,3,[2,3],f1,f2,f3]

    函數嵌套

    def f1():def f2():pass

    名稱空間與作用域

  • 內置名稱空間
  • 全局名稱空間
  • 局部名稱空間
    • 執行順序:內置--》全局--》局部
    • 查找順序:從當前位置開始,如果當前為局部,則為局部--》全局--》內置

    作用域: 全局的變量和局部的變量沒有任何關系,即使兩者中有同一名字的變量,同意名字的變量之間進行任何操作都不會影響對方

    x = 10def f1():x = 2print(x) # 2f1()print(x) # 10

    可變的作用域事項(了解)

    lis = [1]def f1():lis[0] = 2f1()print(lis) # [2]

    閉包函數

    def f1(x):def f2():print(x)return f2f = f1(5) # f-->f2,x=5 f() # f()-->f2(),x=5 # 5 f() # 5f3 = f1(3) # f-->f2,x=3 f3() # f()-->f2(),x=3 # 3 f3() # 3
    • 把內部定義的變量放到內部的函數中,讓兩者一起返回出去

    裝飾器

    def deco(func):def wrapper(*args,**kwargs): # 賦值后的time_sleepres = func(*args,**kwargs) # 真正的time_sleepreturn resreturn wrapper@deco # time_sleep(賦值后的) = deco(time_sleep(真正的)) def time_sleep(name):print(name)return 123

    無參裝飾器

    is_login_dict = {'username': None}def login_deco(func):def wrapper(*args, **kwargs): # 賦值后的time_sleepif not is_login_dict['username']:username = input('請輸入你的用戶名》》》').strip()if username != 'fanping':print('非法登錄')returnis_login_dict['username'] = usernameres = func(*args, **kwargs) # 真正的time_sleepreturn reselse:res = func(*args, **kwargs) # 真正的time_sleepreturn res return wrapper@login_deco def shopping():print('from shopping')@login_deco def withdraw():print('from withdraw')

    有參裝飾器

    is_login_dict = {'username': None}def auth(origin):def login_deco(func):def wrapper(*args, **kwargs): # 賦值后的time_sleepif origin == 'file':if not is_login_dict['username']:username = input('請輸入你的用戶名》》》').strip()if username != 'fanping':print('非法登錄')returnis_login_dict['username'] = usernameres = func(*args, **kwargs) # 真正的time_sleepreturn reselse:res = func(*args, **kwargs) # 真正的time_sleepreturn reselif origin == 'mongodb':print('非法登錄')else:print('dsb')return wrapperreturn login_deco# f = origin('file') # login_deco # shopping = f(shopping) # shopping()@auth('file') def shopping():print('from shopping')@auth('mongodb') def withdraw():print('from withdraw')
    • ==裝飾器是為了給函數增加功能,但是不改變函數內部語法,不改變函數調用方式==

    轉載于:https://www.cnblogs.com/1naonao/p/10932642.html

    總結

    以上是生活随笔為你收集整理的总复习(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。