python部分總結

python這部分的學習,我本身是充滿信心的,畢竟本身工作當中用到了pandas,但是在學習過程中還是發現了許多不足,例如循環部分while True,高級函數用法等這些細節知識點,現在通過復盤再把這些知識點總結一下,不理解的地方再多思考和練習,最終達到鞏固和熟練基礎知識的目的。

一、輸出

1 格式化輸出

常用格式化字符:
%s-----字符串
%d-----有符號十進制整數
%06d-----表示輸出的整數顯示位數,不足的地方使用0補全
%-6d------做左對齊
%f-----浮點數
%.2f-----表示小數點后只顯示兩位
%%-----%

2 補充和思考

'-' :指定左對齊。
'+' :表示數值總要帶符號,正數帶“+”號,負數帶 “-” 號。
0 :表示不補充空格,而是補充 0。
示例如下:

num = 39
print("num is: %06d" % num)      #  最小寬度為6,左邊不足的用 0 補充,輸出:num is: 000039
print("pi is: %010.4f" % pi)      # 最小寬度為10位,小數點后保留4位,右對齊,左邊補0,輸出:pi is: 00003.1416
name = 'Michael'
print("the name is: %.4s" % name)    # 字符串保留4個字符,輸出:the name is: Mich
print("the name is: %8.2s" % name)  # 保留2個字符,最小寬度為8位,輸出:the name is:       Mi

二 if條件和邏輯語句

1 注意知識點1

當使用if條件語句時,最后一行打印無論是否滿足條件都會打印。代碼如下:

age = 18
if age >= 18:
    print("可以進入網吧嗨皮")
else:
    print("還沒有長大,回家吧")
# 無論條件是否滿足都會執行
print("這句代碼什么時候執行?")

2 注意知識點2

當定義一個布爾型變量 is_employee,編寫代碼判斷是否是本公司員工的寫法如下:

is_employee = False

if not is_employee: # 等于if is_employee is not True:

    print("do not enter")

3 注意知識點3

elif 和 else 都必須和 if 聯合使用,而不能單獨使用,
elif 強調的是 并列的多種結果
邏輯運算符 強調的是 與某個結果有關的 多個條件

4 注意知識點4

if 條件語句中使用多個條件的邏輯運算時要分別用()括起來:

# 假定電腦就只會出石頭
player = int(input("請出拳 石頭(1)/剪刀(2)/布(3):"))
computer = 1

# player滿足贏的條件,注意用括號分別括起來
if ((player == 1 and computer == 2) or
    (player == 2 and computer == 3) or
    (player == 3 and computer == 1)):

    print("you win")
elif player == computer:
    print("once again")
else:
    print("you lose")

三 循環語句

1 while 基本語法規則

變量設置初始值 # 注意!

while 條件(判斷 變量是否滿足條件):
    條件滿足時,做的事情1
    條件滿足時,做的事情2
    條件滿足時,做的事情3
    ...(省略)...

    修改變量 # 注意!

舉例(注意在變量設置初始值和修改變量的用法):

# 1. 定義重復次數計數器
i = 1

# 2. 使用 while 判斷條件
while i <= 10000:
    # 要重復執行的代碼
    print("媳婦兒,我錯了")
    # 處理計數器 i
    i = i + 1

2 break用法

在循環過程中,如果 某一個條件滿足后,不再希望循環繼續執行,可以使用 break 退出循環

i = 0
while i < 10:
    # break 某一條件滿足時,退出循環,不再執行后續重復的代碼
    # i == 3
    if i == 3:
        break
    print(i)
    i += 1
print("over")

3 continue用法

在循環過程中,如果 某一個條件滿足后,不希望執行本次循環代碼,但是又不希望退出循環,可以使用 continue。也就是:在整個循環中,只有某些條件,不需要執行循環代碼,而其他條件都需要執行

i = 0
while i < 10:
    # 當 i == 7 時,不希望執行需要重復執行的代碼
    if i == 7:
        # 在使用 continue 之前,同樣應該修改計數器
        # 否則會出現死循環
        i += 1
        continue
    # 重復執行的代碼
    print(i)
    i += 1

4 循環嵌套用法

復習例子a

row = 1
while row <= 5:
    # 假設 python 沒有提供字符串 * 操作
    # 在循環內部,再增加一個循環,實現每一行的 星星 打印
    col = 1
    while col <= row:
        print("*", end="")
        col += 1
    # 每一行星號輸出完成后,再增加一個換行
    print("")
    row += 1

復習例子b

# 定義起始行
row = 1
# 最大打印 9 行
while row <= 9:
    # 定義起始列
    col = 1
    # 最大打印 row 列
    while col <= row:
        # end = "",表示輸出結束后,不換行
        # "\t" 可以在控制臺輸出一個制表符,協助在輸出文本時對齊
        print("%d * %d = %d" % (col, row, row * col), end="\t")
        # 列數 + 1
        col += 1
    # 一行打印完成的換行
    print("")
    # 行數 + 1
    row += 1

5 作業中注意點 while True:

while True:作為無限循環,經常在不知道循環次數的時候使用,并且需要在循環內使用break才會停止。采用該語句的核心思想是:如果出現錯誤的話,還可以繼續循環,例如在用戶輸入用戶名或密碼錯誤的情況下返回到開始部分,請求繼續輸入。在作業中是猜年齡當嘗試3次后,還沒猜對,但還想繼續玩,while True就可以繼續讓其猜3次,以此往復。

age_of_oldboy='65'
count=0
while True:
  if count == 3:
      choice=input('繼續Y/N?: ')
      if choice == 'Y' or choice == 'y':
          count=0
      else:
          break # 重要!!
  guess=input('請輸入年齡: ')

  if guess == age_of_oldboy:
      print('你猜對啦')
      break # 重要!!

  count+=1

五 列表

1列表的增刪改查

列表.png

a.增加元素

1) 列表.insert(索引,數據): 在指定位置插入一個值

2) 列表.append(數據):在末尾追加一個值,這個最常用

3) 列表.extend(Iterable):將另一個列表(也可以)的全部內容追加到末尾

注意知識點:使用 append 追加的是將后面的列表作為一個整體追加到最后了,而使用 extend 追加的是將里面的元素依次追加到最后。

b. 刪除元素:

1) del 列表[索引]:刪除指定索引元素

2)列表.remove(數據)

3)列表.pop():可指定索引刪除,不指定會刪除最后一個

注意知識點:pop 函數還有返回值,會返回被刪除的值

c. 修改元素:直接指定索引賦值,就是修改元素內容

d. 查詢元素:

1)* 列表[索引]:根據索引獲取(查詢)值*

2) 列表.index(數據):查詢給定值的索引,即想要知道元素的位置,如果查詢元素有多個相同值只會返回第一個值出現的記錄

3) 列表.count(數據):查詢值出現的次數

4) len(列表):有多少個元素

5) if 數據 in 列表:判斷元素是否在列表中,用作條件語句中

e. 元素排序:list.sort()

注意知識點:sort 方法還有一個參數,key,這個參數是傳遞函數方法名的,可以傳入自定義的函數名或者是匿名函數

list=[5,7,9,0,4,'8']
# 這里是使用 int 函數,意思是將里面可以轉換為數字的字符串轉換成數字來排序,如果轉換不成功會報錯,如‘8d’ 顯示是不能轉換為數字類型的
list.sort(key=int,reverse=True)
print(list)

2 列表的循環遍歷

a while

while循環實現列表的遍歷:打印出列表的所有元素,i 是起到循環得到索引值的作用

i = 0
name_list = ["zhangsan", "lisi", "wangwu"]
list_count = len(name_list)
while i < list_count:
    name = name_list[i]
    print(name)
    i += 1

b for

for 循環其實就是專門用來對高級變量進行循環遍歷的(如元組、字典)

for name in name_list:
    循環內部針對列表元素進行操作
    print(name)

3 list 應用場景

  • 列表 一般只存儲相同類型的數據
  • 通過 for循環,在循環體內部,針對列表中的每一項元素,執行相同的操作

六 元組

注意:元組的元素不能改變,但是,如果元組中的元素如果為列表/字典時,則可以修改列表/字典中的元素的值,數據之間使用,分隔

1 元組的查詢

查詢.png
tuple=(5,7,3,7)

print(tuple)
# 根據索引查詢值
print(tuple[0])
# 根據值查詢索引
print(tuple.index(7))
# 求值出現的次數
print(tuple.count(7))
# 求元組的長度:即元素個數
print(len(tuple))
# for 遍歷
for n in tuple:
    print(n)

2 應用場景:自動組包

自動組包的默認類型:組包后是一個元組,可以用來快速交換兩個變量的值

a=3
b=4
# 賦值的右側有多個數據時,會自動組包成元組
# 如果賦值的左側接收的變量和右側的變量的個數一致,就會自動解包,一一對應賦值
b,a=a,b
# 注意:右側組包后相當于是變成了一個元組
# b,a=(a,b)
print(a)
print(b)

# 如果個數不一致左邊就得到一個元組
c=a,b
print(c)
print(type(c))

七 字典

字典使用鍵值對(key、value對)存儲數據,鍵值對之間使用,分隔

  • 鍵 key 索引:注意索引不再是 0,1,2... 了,雖然可以用數字,但是一般使用字符串
  • 值 value 數據
  • key:value 之間使用:分隔
  • 鍵必須是唯一的:如果有多個,后者會覆蓋前者
  • 值 可以取任何數據類型,但鍵只能字符串、數字或元組
  • 字典是無序對象的集合

1 字典的增改刪查

字典.png

a 增加元素

1) 字典[鍵] = 數據

鍵不存在,會添加鍵值對;鍵存在,會修改鍵值對的值

b 刪除元素

1) del 字典[鍵]

2) 字典.pop(鍵)

注意:pop 刪除成功了會返回被刪除的值

3) 字典.clear

c 修改元素

1) 字典[鍵] = 數據

2) 字典.setdefault(鍵,數據)

3) 字典.update(字典2)

d 查詢元素

1)字典[鍵]:注意不能根據值來查詢鍵

2)字典.get(鍵)

2 字典的遍歷

  • 字典.keys()、字典.values()、
  • 字典.items():返回的是一個元組
  • 以上三個都是視圖對象類型,可以用for遍歷,也可以轉換為list
  • 直接對一個字典進行 for 遍歷,取出來的是 鍵

3 應用

  • 使用 多個鍵值對,存儲 描述一個 物體 的相關信息 —— 描述更復雜的數據信息
  • 將 多個字典 放在 一個列表 中,再進行遍歷,在循環體內部針對每一個字典進行 相同的處理

八 函數

1 定義

  • 定義函數:在函數中編寫代碼,實現功能
  • 調用函數:執行編寫代碼
    定義函數的格式如下:
def 函數名():

    函數封裝的代碼
    ……

函數的執行順序總結:

? 程序代碼始終都是順序執行的,也就是從第一行到最后一行,但在程序執行到 def func 定義函數的語句時不會運行函數,而是將函數名作為標識符添加到內存中而不會運行函數里面的代碼。而當程序繼續往下,到調用函數的語句時,就會到內存中查詢是否有該函數,如果有就調用函數名對應的函數代碼。這里也有一個要注意的事項,就是函數調用必須在函數定義后,不然找不到函數會報錯。

注意:函數體相對比較獨立,函數定義的上方,應該和其他代碼(包括注釋)保留 兩個空行

2 函數的參數

a 如何處理只能固定數值相加的函數??

def sum_2_num():

    num1 = 10
    num2 = 20
    result = num1 + num2

    print("%d + %d = %d" % (num1, num2, result))

sum_2_num()

解決:

def sum_2_num(num1, num2):

    result = num1 + num2

    print("%d + %d = %d" % (num1, num2, result))

sum_2_num(50, 20)

總結:函數的參數增加了函數的通用性,針對相同的數據處理邏輯,能適應更多的數據

  • 函數內部,把把參數當做 變量 使用,進行需要的數據處理
  • 函數調用時,按照函數定義的參數順序,把 希望在函數內部處理的數據,通過參數 傳遞

b 形參和實參

  • 形參:定義 函數時,小括號中的參數,是給真實數據占位用的,在函數內部 作為變量使用
  • 實參:調用 函數時,小括號中的參數,是傳遞到 函數內部 的 真實數據
a = 5  

def test1(a): 
    # 這里 a 是形參,是在函數內部定義的,作用域只在函數內部
    a += 1
    print("%d" % a)

test1(2)  
# 這里因為形參的作用域不到這里,所以這個 a 是外面的 a
print("%d" % a)

3 函數返回值

def sum_2_num(num1, num2):
    """對兩個數字的求和"""

    return num1 + num2

# 調用函數,并使用 result 變量接收計算結果
result = sum_2_num(10, 20)

print("計算結果是 %d" % result)

a 關于return

  • return 后面可以不跟值
def func_sum():
    """求和 1+2"""
    sum_num = 1 + 2
    print(sum_num)
    return
  • 函數中凡是代碼執行到 return 時,都會終止函數的執行,返回到函數調用的代碼處。所以可以靈活利用 return 結束程序
def func_sum():
    """求和 1+2"""
    sum_num = 1 + 2
    print(sum_num)

    return
    # 這行代碼不會執行了
    print('不會執行這行代碼')

res=func_sum()
print(res)

4 四種函數類型

1 無參數,無返回值的函數

此類函數,不能接收參數,也沒有返回值,一般情況下,打印提示燈類似的功能,使用這類的函數

def print_menu():
    print('--------------------------')
    print('      xx涮涮鍋 點菜系統')
    print('')
    print('  1.  羊肉涮涮鍋')
    print('  2.  牛肉涮涮鍋')
    print('  3.  豬肉涮涮鍋')
    print('--------------------------')

2 無參數,有返回值的函數

此類函數,不能接收參數,但是可以返回某個數據,一般情況下,像采集數據,用此類函數

# 獲取溫度
def get_temperature():
    # 這里是獲取溫度的一些處理過程
    # 為了簡單起見,先模擬返回一個數據
    return 24

temperature = get_temperature()
print('當前的溫度為:%d' % temperature)

3 有參數,無返回值的函數

此類函數,能接收參數,但不可以返回數據,一般情況下,對某些變量設置數據而不需結果時,用此類函數

4 有參數,有返回值的函數

# 計算1~num的累積和
def calculate_num(num):
    result = 0
    i = 1
    while i < =num:
        result = result + i
        i += 1
    return result

result = calculate_num(100)
print('1~100的累積和為:%d' % result)

5 列表推導式

  • 基本方式:
  • a=[x for x in range(4)]
  • b=[x for x in range(1,7) if x%2!=0]
  • d=[(x,y) for x in range(1,4) for y in range(3,5)]

6 匿名函數

a 語法: lambda [參數列表]: 表達式

b 要點

lambda 表達式的幾個要點:

  • lambda 表達式必須使用 lambda 關鍵字定義。
  • 在 lambda 關鍵字之后、冒號左邊的是參數列表,可以不給參數,也可以給多個參數。多個參數用逗號分隔,冒號右邊是 lambda 表達的返回值。
  • lambda 表達式也叫做匿名函數,也是單行函數體的函數。

c 應用

  • 對于單行函數,使用 lambda 表達式更簡潔,省去定義函數的過程。
  • 對于不需要多次復用的函數,使用 lambda 表達式可以在用完之后立即釋放,提高性能。
# 計算平方
x = map(lambda x: x * x, range(5))
 print([i for i in x])
# 計算偶數的平方
y = map(lambda x: x * x if x % 2 ==0 else 0, range(5))
print([i for i in y])

注意:Lambda函數能接收任何數量的參數但只能返回一個表達式的值,匿名函數不能直接調用print,因為lambda需要一個表達式

d 函數作為參數傳遞

# 定義一個函數
def fun(a, b, opt):
     print("a = %s" % a)
     print("b = %s" % b)
     print("result =%s" % opt(a, b))

# 調用函數
fun(1, 2, lambda x,y:x+y)

e 作為內置函數的參數

# 作為內置函數的參數
stus = [
    {"name": "zhangsan", "age": 18},
    {"name": "lisi", "age": 19},
    {"name": "wangwu", "age": 17}
]
# 字典中每個key
a = map(lambda x: x['name'],stus)
print([i for i in a])
# 按name排序
stus.sort(key=lambda x:x['name'])
print(stus)
# 按age排序
stus.sort(key=lambda x:x['age'])
print(stus)

九 高級函數

1 局部變量

  • 局部變量,就是在 函數內部定義的變量
  • 局部變量的作用域只在函數內部

2 全局變量

  • 在函數外邊定義的變量叫做 全局變量
  • 全局變量能夠在所有的函數中進行訪問
# 定義全局變量
a = 100

def test1():
    print(a)

def test2():
    print(a)

# 調用函數
test1()
test2()
  • 函數內修改全局變量: global 聲明
a = 10

def test():
    global a
    a = 5  # 修改全局變量
    print("函數內a:%d" %a)

test()
print("函數外a:%d" %a)

3 函數返回值二

a 多個return

def is_even_num(num):
    """判斷奇偶數"""
    if num % 2 == 0:
        return True
    else:
        return False

b 多個返回值

def func2():
    return 1,1.5

#返回多個數據時,自動將數據組包成元組
a = func2()
print(a)

#用多個變量接收返回值,python會自動將元組 拆包 成單個數據
a,b = func2()
print(a)
print(b)

a,b,c = 1,1.5,"hello"
print(a)
print(b)
print(c)

當返回多個數據時,python會自動將數據 組包 成元組,如果使用多個變量接收返回值,python會自動將元組 拆包 成單個數據

4 函數參數二

a 默認參數

  • 形參設定默認值 稱為 默認參數
  • 調用函數時,如果沒有傳入默認參數對應的實參,則實參使用默認值。
def printinfo(name, age = 35):
   # 打印任何傳入的字符串
   print("Name: %s", % name)
   print("Age: %s", % age)

# 調用printinfo函數
printinfo("miki")
printinfo("miki", 20)
  • 注意:默認參數一定要位于參數列表的最后面。

b 關鍵字參數(缺省參數)

調用函數時,實參可以指定對應的形參,稱為 關鍵字參數

def printinfo(name, age):
   # 打印任何傳入的字符串
   print("Name: %s", % name)
   print("Age: %s", % age)

printinfo(age=9,name="miki" )

c 可變參數

1) args 元組可變參數

  • 函數可以定義 可變參數,用于接收任意數量的參數
  • 可變參數的前邊需要添加*,用于提示python解釋器該參數為可變參數
  • 使用可變參數直接用args即可(不需要加*)
  • 可變參數的本質是 將傳遞的參數包裝成了元組
def sum_num(a, b, *args):  
    result = a + b
    for temp in args:
        result += temp

    return result

sum_num(1, 2, 3, 4, 5, 6)

# 關鍵字參數一旦使用,所有實參都要使用,除非該實參對應的是可變參數
# sum_num(1, 2, 3, 4, a=5)
# sum_num(a=5, b=4)

2)kwargs 字典可變參數

  • 字典可變參數:可以接受多余的關鍵字參數
  • 字典可變參數必須要放在形參的最后面
  • 定義參數時需要在變量名前添加兩個*
  • 這種可變參數會將 不存在的關鍵字參數包裝成字典
def sum_num(a, b, *args, **kwargs):  
    print(a)
    print(b)
    print(args)
    print(kwargs)

sum_num(1, 2, 3, 4, 5, 6, mm=5, nn=6)

d函數的參數傳遞機制

Python 中函數的參數傳遞機制都是“值傳遞”,就是將實際參數值的副本(復制品)傳入函數,而參數本身不會受到任何影響。示例如下:

# 傳遞可變參數
def sum_num(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)

def test(*args, **kwargs):
    print(args)
    print(kwargs)

sum_num(1, 2, 3, 4, 5, 6, 7, mm=5, nn=6)

5 總結

Python 中的函數是“一等公民”,因此函數本身也是一個對象,函數即可用于賦值,也可用作其函數的參數,還可作為其他函數的返回值。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,363評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,497評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,305評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,962評論 1 311
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,727評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,193評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,257評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,411評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,945評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,777評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,978評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,519評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,216評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,657評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,960評論 2 373