封裝成vla函數_第四章:Python之函數

第一節:函數入門與定義函數

  • 理解函數
    • 所謂函數,就是為一段實現特定功能的代碼“取”個名字,以后即可通過該名字來執行(調用)這段代碼
    • 從邏輯上看,函數相當于一個黑匣子
  • 定義函數的語法
    • 定義函數的三條鐵律
      • 函數需要幾個關鍵的、需要動態變換的數據,這些數據就應該定義成函數的參數
      • 函數需要傳出去幾個重要的數據(就是調用該函數的人希望得到的數據),這些數據應該定義成返回值
      • 函數內部的實現過程
    • 函數的語法:
fff395751924a0140eb46af70a578893.png

函數的語法

# 定義函數,無參數def first():    # 之前學習的定義變量、賦值、運算、分支、循環等全部都可以寫在函數里面    print('first 函數')    for i in range(5):        print(i)first()# 只要執行函數,函數體的代碼就可以被重復的調用(復用)first()first()# 函數定義,有一個參數 namedef hello(name):    print('hello 函數')    print('您好,' + name)hello('python')hello('java')# 函數定義,有2個參數 name, agedef info(name, age):    print('info函數')    print('name參數', name)    print('age參數', age)info(python, 90)info(java, 70)# 定義函數,有返回值def max(a, b):    r = a if a > b else b    # 返回值    return r# 返回值的意思,當程序調用函數之后,會得到N個值x = max(10, 20)print(x)x = max(30, 20)print(x)# print也是個函數,函數的嵌套print(max(20, 50))
  • 為函數提供文檔
    • 只要把一段字符串放在函數聲明之后、函數體之前,這段字符串就是函數的說明文檔
    • Python內置的help()函數查看其它函數的幫助文檔
    • 通過函數的_doc_屬性來查看函數的說明文檔
# 自定義說明文檔def test(a):    '''    test 函數的說明,這是一個簡單的函數    a-代表什么意義    return- 代表什么意義    '''    # 空語句    passprint(test.__doc__)help(test)

第二節:多返回值函數與遞歸函數

  • 多返回函數
    • 多返回值,本質就是返回元組
    • 程序即可返回元組,也可直接返回多個值(系統會自動將其封裝成元組)
    • 獲取多返回值函數的返回值時
      • 既可以用單個變量(元組)來獲取
      • 也可以用多個變量獲取(元組解包)
import random# 希望該函數返回三個隨機的大寫字符def test():    # 生成三個隨機的大寫字符    c1 = chr(random.randint(65,90))    c2 = chr(random.randint(65,90))    c3 = chr(random.randint(65,90))        # 以元組的形式返回    return(c1, c2, c3)    # 程序自動封裝成元組    return c1, c2, c3# r就是一個元組r = test()print(r)print(test())# 多返回值函數,即可用多個變量來接收返回值,也可用單獨變量來接收返回值c1, c2, c3 = test()print(c1)print(c2)print(c3)
  • 遞歸函數
    • 函數體內調用它自身,被稱為函數的遞歸
    • 函數遞歸包含了一種隱式的循環,它會重復執行某段代碼,但是這種重復執行無需循環控制
    • 遞歸函數的注意點
      • 向已知的方向遞歸
      • 讓遞歸有結束的時候,不要無限遞歸
# 無限遞歸的例子def foo():    print('111')    print('222')    foo()foo()# 計算N的階乘def frac(n):    if n < 1:        print("n不能小于1")        return    elif n == 1:        return 1    else:        # n的階乘總是等于上一個階乘*n        # 函數調用自身        return frac(n-1) * n        # 該函數的結束點是n==1,因此要向n==1方向遞歸        print(frac(5))print(frac(6))

第三節:關鍵字參數與參數默認值

  • 關鍵字參數
    • Python函數的參數名不是無意義的,Python允許調用函數時通過名字來傳入參數值
    • 調用函數時支持兩種方式為參數指定值
      • 位置參數:必須按照順序為每個參數指定參數值
      • 關鍵字參數(命名參數):按參數名為參數指定參數值
def info(name, age, height):    print("name:", name)    print("age:", age)    print("height:", height)    # 位置參數,按照順序傳遞參數info('fkjava', 24, 183)# 關鍵字參數(命名參數)# 關鍵字參數的優勢是 1:不需要按照順序 2:可讀性更高info(age=34, name='java', height=179)# 混合使用info('python', height=178, age=45)# 混合使用錯誤:關鍵字參數必須位于位置參數的后面info(name='python', 178, 45)
  • 參數的默認值
    • 程序需要在定義函數的時候為一個或者多個形參指定默認值,這樣調用函數時就可以省略該形參傳入參數值,而是直接使用該形參的默認值
    • 為形參指定默認值的語法格式如下:形參名 = 默認值
# 定義帶默認值的參數(一個參數有默認值)def info(age, name='python'):    print('age參數為:', age)    print('name參數為:', name)      # 為參數指定默認值之后,調用時候可省略指定的參數值,該參數使用默認值    info(23)info(45, 'abc')info(11, 'Java')# 混合方式info(19, name='bcd')# 定義帶默認值的參數(兩個參數有默認值)def info(age=19, name='python'):    print('age參數為:', age)    print('name參數為:', name)    info()info(20)# 如果你希望省略前面的參數指定參數值,后面的參數應該用關鍵字參數來傳入參數info(name='go')

第四節:參數搜集和逆向參數收集

  • 參數收集
    • 普通參數收集
      • 在形參前面加上一個星號(*),這樣就意味著該參數可接收多個參數值,多個參數值被當成元組傳入
      • 參數收集的本質就是一個元組:Python會將傳給帶*參數的多個值收集成一個元組
      • Python允許個數可變的參數可以處于形參列表的任意位置,但是最多只能帶一個支持“普通”參數收集的參數
      • 如果支持“普通”參數收集的形參位于前面,后面參數則需要使用關鍵字參數傳值
# books參數支持收集,它可接受多個參數值def test(num, *books):    print("num:", num)    print("books:", books)# 將多個值自動封裝成一個元組test(5, "go", "python", "java")def info(*names, msg):    for name in names:        print("%s, %s" % (name, msg))# 如果你要為參數收集后的參數傳入參數值,需要用關鍵字參數 info("孫悟空", "豬八戒", "牛魔王", msg="歡迎大家") # 否則所有參數都會被參數收集成元組 info("孫悟空", "豬八戒", "牛魔王", "歡迎大家")
    • 關鍵字參數收集
      • 在參數前面添加兩個星號“**”,該參數支持關鍵字參數收集,收集的參數被當做dict處理
      • 一個函數可同時支持普通參數收集和關鍵字參數收集
# books參數支持普通參數收集,它可接受多個參數值,socres支持關鍵字參數收集def test(num, *books, **socres):    print("num:", num)    print("books:", books)    print("socres:", socres)test(20, 'fkjava', 'python', 'swift', 語文=89, 數學=93)def info(*names, msg, **socres):    for name in names:        print("%s, %s" % (name, msg))    print(socres)# 程序知道msg參數將是傳給msg的,因此socres參數不會收集它# dict的參數收集,它只收集不能明確傳入的關鍵字參數info("孫悟空", "豬八戒", "牛魔王", msg="歡迎大家", 語文=89, 數學=93) 
  • 逆向參數收集
    • 在列表、元組前添加*,在字典之前添加**
def test(a, b):    print(a)    print(b)# 元組的逆向參數收集,以普通參數的形式為參數傳入參數值vals = (20, 40)# 調用函數時,元組不能自動解包# 默認情況下,元組是一個整體test(vals)# 這個語句是錯誤的# *對元組自動解包(逆向參數收集)test(*vals)# 列表的逆向參數收集,以普通參數的形式為參數傳入參數值msgs = ['aa', 'bb']test(*msgs)# 字典的逆向參數收集,以關鍵字參數的形式為參數傳入參數值# 簡單來說,**是將字典解析成關鍵字參數vals = {'a': 89, 'b': 93}test(**vals)

第五節:變量作用域

  • 理解變量作用域
    • 根據定義變量的位置,變量的作用域分為兩種:
      • 局部變量:在函數中定義的變量包括參數,都被成為局部變量
      • 全局變量:在函數外面、全局范圍內定義的變量,被稱為全局變量
# 全局變量a = 35def info():    # 局部變量    b = 'fkjava'    # 正確,局部變量只能在當前函數內訪問    print(b)    # 正確,全局變量可以在任何函數內訪問    print(a)    def info1():    # 局部變量    c = 'java'    print(c)    # 正確,全局變量可以在任何函數內訪問    print(a)    # 錯誤,局部變量只能在定義局部變量的函數中使用    #print(b)    info()info1()
  • 變量字典
    • 獲取變量字典
      • globals():該函數返回全局范圍內搜所有變量組成的“變量字典”
      • locals():該函數返回當前局部范圍內搜所有變量組成的“變量字典”
      • vars(object):獲取指定對象的范圍內所有變量組成的“變量字典”,如果不傳入object參數,vars()和locals()作用完全相同
# 全局變量a = 35name = 'java'def info():    # 局部變量    b = 'fkjava'    # 正確,局部變量只能在當前函數內訪問    print(b)    # 正確,全局變量可以在任何函數內訪問    print(a)        # 局部變量組成的數組    print(locals())    def info1():    # 局部變量    c = 'java'    print(c)    # 正確,全局變量可以在任何函數內訪問    print(a)    # 錯誤,局部變量只能在定義局部變量的函數中使用    #print(b)        # 局部變量組成的數組    print(locals())# 全局變量組成的數組print(globals())  # locals獲取當前范圍內的所有局部變量# 因此你在全局范圍調用locals函數的時候,它返回全部的全局變量# 簡單來說,你在全局范圍內,用globals和locals函數效果是一樣的print(locals())   info()info1()
  • 處理局部變量遮蔽全局變量
    • 全局變量默認可以在所有函數內訪問
    • 如果在函數中定義了與全局變量同名的變量,此時就會發生局部變量的遮蔽(hide)全局變量的情形
# 解決方法一name = 'java'def info():    # 依然訪問全局變量name    print(globals()['name'])    # 在函數內對變量賦值,變成了定義新的name變量    name = 'python'    print(name)    info()# 全局變量name沒有改變print(name)# 解決方法二name = 'java'def info():    # 聲明作用:該函數中的name始終使用全局變量    global name    # 依然訪問全局變量name    print(name)    # 前面已經聲明了name始終是全局變量    # 因此此處不是重新定義局部變量    name = 'python'    print(name)    info()# 全局變量name會被改變print(name)

第六節:局部函數

  • 理解局部函數
    • 放在函數體內的函數稱為局部函數
    • 在默認情況下,局部函數對外部是隱藏的,局部函數只能在其封閉(enclosing)函數內使用
  • 定義、使用局部函數
def foo():    print('foo函數')    # 嵌套函數:在其他函數內定義的函數    def bar():        for i in range(5):            print('bar函數')    # 只能在foo函數內調用bar函數    bar()# 在此處調用bar函數出錯,局部函數只在它所在的封閉函數內有效# bar()foo()
  • 封閉函數返回局部函數
    • 封閉函數可以返回局部函數,以便程序在其他作用域中使用局部函數
    • 如果封閉函數沒有將局部函數返回出來,那么局部函數將只能在封閉函數內部調用
def foo():    print('foo函數')    # 嵌套函數:在其他函數內定義的函數    def bar():        for i in range(5):            print('bar函數')    # bar表示返回函數本身(函數也相當于一個值,是function類型的值)    # bar()表示調用(執行)函數    return bar    # foo函數的返回值時bar函數,因此此處是用變量r來保存bar函數r = foo()print(r)# 此時R引用bar函數本身,r的類型是functionprint(type(r))print('-' * 60)# 由于r是函數,因此程序可以調用它r()# 下面代碼看上去有點詭異# foo函數調用之后返回bar函數,bar函數也可調用foo()()
  • 局部函數的變量遮蔽
    • 局部函數內的變量也會遮蔽它所在的封閉函數的局部變量
    • 避免方法:可用nonlocal進行聲明
def test():    name = 'fkjava'    def  info():        print('info 函數')                # 聲明后面的name變量不是聲明新的局部變量,而是引用所在封閉函數的局部變量        nonlocal name        print('name:', name)        # 默認情況下,下面代碼是為info這個局部函數再次定義name局部變量        # 此時name局部變量就會遮蔽test函數的name變量        name = 'crazyit'        # 在沒有用nonlocal聲明之前,此時打印會出錯,用nonlocal聲明之后,程序正常        print('name:', name)    info()    print(name)test()
    • global與nonlocal總結
      • 作用大致相同,都是用來避免變量遮蔽
      • 區別:global用于聲明訪問全局變量。nonlocal用于聲明訪問局部函數所在封閉函數內的局部變量

第七節:案例實操-定義計算N的階乘的函數

  • 實現方法
    • 方法一:使用循環計算階乘
      • 控制循環計數器從1循環到N
      • 讓循環計數器與前一個結果相乘,直到循環計數器等于N就得到了N的階乘
def fract():    r = 1    if n < 1:        print('n不能小于1')        return     else:         for i in range(1, n + 1):             r *= i         return rprint(fract(5))
    • 方法二:運用遞歸計算階乘
      • 經研究發現:N的階乘等于N乘以N-1的階乘,因此可借助于遞歸來實現
      • N為1時,N的階乘是1,保證遞歸有結束點
def fract():    if n < 1:        print('n不能小于1')        return     # 對于遞歸函數來說,必須保證在某個條件下,函數不再調用自身,遞歸結束     elif n == 1:         return 1     else:         # 遞歸:就是函數里面調用自身         return fract(n - 1) * n         print(fract(5))
    • 方法三:調用reduce函數計算階乘
      • Python在functools模塊提供了reduce()函數,該函數使用指定函數對序列對象進行積累
      • 可通過help(reduce)查看該函數的用法:reduce(function, sequence[, initial])
b44878fb610ab944205056374d9f4aec.png
import functoolsdef fn(x, y):    return x * y    def fract():    if n < 1:        print('n不能小于1')        return    else:        '''        # fn(ele1, ele2)->r        # fn(r,ele3)->r        # fn(r,ele4)->r        '''        # 方法一:        return functools.reduce(fn, range(1, n + 1))                # 方法二:        # lambda x ,y: x * y 的本質就是一個函數        return functools.reduce(lambda x ,y : x * y, range(1, n + 1))print(fract(5))

第八節:案例實操-定義計算矩陣轉置的函數

  • 使用循環進行轉置
    • 首先創建一個長度與原矩陣第一個元素長度相等的新列表
    • 使用遍歷原矩陣的每個元素,再使用嵌套循環遍歷每個元素,將列表中的元素添加到新列表對應的列表元素中
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]'''# 轉置就是行變列 列變行# 轉置之前1  2  3  45  6  7  89 10 11 12# 轉置之后1  5  92  6 103  7 114  8 12'''def printmatrix(m):    # 列表嵌套列表,因此ele也是列表    for ele in m:        # 打印一行        for e in ele:            print('%2d' % e, end=' ')     print(' ')     def transformmatrix(m) :    # m[0]有幾個元素,說明原矩陣有多少列    # 列轉成行    rt = [[] for i in m[0]]    for ele in m:        for i in range(len(ele)):            # rt[i]代表新矩陣的第i行            # ele[i]代表原矩陣當前行的第i列            rt[i].append(ele[i])     return rtprintmatrix(matrix)print('-' * 60)printmatrix(ransformmatrix(matrix))
  • 使用zip()函數轉置
    • zip函數的作用正是合并多個序列:多個序列第一個元素合并成第一個元素,多個序列第二個元素合并成第二個元素......
    • 運用逆向函數收集即可
bd541187b1ad4637301487208678052f.png
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]def printmatrix(m):    # 列表嵌套列表,因此ele也是列表    for ele in m:        # 打印一行        for e in ele:            print('%2d' % e, end=' ')     print(' ')     def transformmatrix(m) :    # 逆向參數收集,將矩陣中多個列表轉換成多個參數,傳給zip    return list(zip(*m))printmatrix(matrix)print('-' * 60)printmatrix(ransformmatrix(matrix))
  • 使用numpy模塊轉置
    • numpy模塊提供transpose函數執行轉置,該函數的返回值是numpy的內置類型:array
    • 調用array的tolist()方法可將array轉換成list列表
matrix = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]def printmatrix(m):    # 列表嵌套列表,因此ele也是列表    for ele in m:        # 打印一行        for e in ele:            print('%2d' % e, end=' ')     print(' ')     def transformmatrix(m) :    # 使用numpy模塊的transpose函數進行轉置    import numpy    return numpy.transpose(m).tolist()printmatrix(matrix)print('-' * 60)printmatrix(ransformmatrix(matrix))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272909.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272909.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272909.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

sqlhelper中事務的簡單用法(初學者)

自己的博客sql1"INSERT INTO tablename(Id,col1,col2) VALUES(Id,col1,col2) update tablename2 set colcol";sql2"INSERT INTO tablename3(Id,col1,col2) VALUES(Id,col1,col2)";//參數設置&#xff08;略&#xff09;using(SqlTransaction tran SqlHel…

allegro大十字光標設置方法

使用大十字光標&#xff0c;在擺放元器件時&#xff0c;容易對齊。在allegro中&#xff0c;可以通過設置實現大十字光標&#xff0c;其具體方法如下&#xff1a; &#xff11;、選擇Setup->User Perferences,即可出現如下圖所示界面&#xff1a; &#xff12;、選擇Display-…

基于.NET平臺常用的框架整理(收藏)

目錄 分布式緩存框架 日志記錄異常處理 關于NoSQL數據庫 自動任務調度框架 依賴注入IOC容器框架 常用的幾個ORM框架 格式和數據類型轉換 反射和動態語言 跨平臺和運行時解決方案 WEB開發和設計 移動互聯網和云計算 網絡通信和網絡協議 圖形和圖像處理框架 桌面應用程序框架 測試…

界址點號_界址點及四至優化

先對文中提到的面做一個解釋&#xff0c;他可以指地塊&#xff0c;宗地。一、界址點先說一下對界址點優化的情況&#xff0c;之前的方法主要是只要考慮了對坐標排序的問題&#xff0c;對于比較規整的面出的效果還是挺好&#xff0c;但往往現實中的面都比較復雜&#xff0c;像下…

java程序 輸入10個數字并求和

課程作業&#xff1a; 模仿JavaAppArguments.java示例&#xff0c;編寫編寫一個程序&#xff0c;此程序從命令行接受多個數字&#xff0c;求和之后輸出結果。 設計思想&#xff1a; 先從命令行讀出數字&#xff0c;然后計算各個數字之和。求出結果。 流程圖&#xff1a; 程序源…

是先打工還是直接創業?答案讓我驚呆了!

第一問&#xff1a;成功路上&#xff0c;您是自己亂走&#xff0c;還是有老師指導更好&#xff1f;人生路上&#xff0c;因為有父母&#xff0c;才有生命&#xff1b;成功路上&#xff0c;因為有老師&#xff0c;才有方向。父母優秀&#xff0c;才可以培養出優秀的孩子。優秀的…

php mysql保存unicode_使用PHP和MySQL存儲和顯示unicode字符串(??????)

我必須將PST文本存儲在MySQL數據庫中&#xff0c;使用PHP腳本獲取它并將其顯示在網頁上。我做了以下&#xff1a;我創建了一個數據庫&#xff0c;并將其編碼設置為UTF-8&#xff0c;并將排序規則設置為utf8_bin。我在表中添加了一個varchar字段&#xff0c;并將其設置為在chars…

最近和朋友微信賣螃蟹有點偏離重心了

副業不能占據你的全部時間,應該是堅持最初的路~不然最后什么都是淺嘗輒止~太極拳心態~轉載于:https://www.cnblogs.com/jackwong/p/4841863.html

科學家公布“壽命計算器”,快算一下你能活多久?

為什么有的人能活到100歲&#xff1f;為什么有的人卻早早離世&#xff1f;到底是什么影響著我們的壽命&#xff1f;美國坦普爾大學神經學系伍得拉夫教授對長壽者進行了數十年的跟蹤考察&#xff0c;推出下面這套“長壽測試題”&#xff08;又稱“壽命計算器”&#xff09;&…

csv導入mysql linux_如何將CSV文件導入MySQL表

如何將CSV文件導入MySQL表我有一個未規范化的事件-來自客戶端的日記CSV&#xff0c;我試圖將它加載到MySQL表中&#xff0c;以便將其重構為正常的格式。我創建了一個名為“CSVImport”的表&#xff0c;該表對CSV文件的每一列都有一個字段。CSV包含99列&#xff0c;因此這本身是…

代碼復審結果

說明&#xff1a;因為本次一些特殊的原因&#xff0c;我與一位韓國留學生同學、以及六班的一位同學一起結對編程。 General (N) Does the code work? Does it perform its intended function, the logic is correct etc.兩位結對的伙伴的代碼都只能實現需求功能中的一部分&…

MVC知識點整理匯總

MVC與ASP.NET MVC基礎概念MVC是Model-View-Controller的縮寫.MVC將應用程序劃分為3大組件:模型\視圖\控制器.MVC不是ASP.NET所特有,它只是一種開發理念.java中的struts2也是一種MVC模型.ASP.NET MVC從2008年發布1.0版以來,截至2014年ASP.NET MVC最新版本已經是5.0.ASP.NET MVC從…

二進制編譯安裝mysql_數據庫(MySQL)二進制安裝+編譯安裝 + MariaDB編譯安裝

配置文件&#xff1a;my.cnf[mysql] :只用于mysql這個客戶端[mysqld][client]&#xff1a;共享與所有客戶端&#xff0c;如mysqldump等MySQL二進制包安裝&#xff1a;(在 mysql/下有個 INSTALL-BINARY 是安裝教程)1、下載通用二進制安裝包 mysql-5.5.33-linux2.6-x86.64.tar.gz…

第三次作業——結對編程

成員&#xff1a;031302439 031302415 本次實踐中我們是用phpmysql來實現所需功能的&#xff0c;其中使用到的軟件有PowerDesigner和WampServer 一. PowerDesigner使用過程 1. 運行程序&#xff0c;進入主界面&#xff0c;新建一個Model&#xff0c;設置DBMS屬性。我們…

NET比較常用的性能優化技巧

現在很多客戶也慢慢開始注重網站的性能了&#xff0c;同時有很多運營網站的公司也不像以前那樣特別在意網站是否非常漂亮&#xff0c;而把更多的精力放在了網站性能優化上面&#xff0c;提供更快更穩定的瀏覽速度&#xff0c;在這個基礎上面進行網站功能上的擴充和完善&#xf…

嵌入式控制系統和計算機系統

在嵌入式項推薦一本書&#xff1a;嵌入式系統設計&#xff08;重慶大學出版社&#xff0c;在船上鵬&#xff09;。我最近也看了一些好的內容&#xff0c;結合操作系統和一些嵌入式知識的原則&#xff0c;構成我們學習的經驗教訓有前前&#xff0c;對于某些以下總結&#xff0c;…

js修改mysql數據庫數據_Node.js操作mysql數據庫增刪改查

關于node.js操作mysql數據庫的相關介紹請閱讀全文吧。下文介紹的非常詳細&#xff0c;具體內容如下所示&#xff1a;安裝mysql模塊npm install mysql數據庫準備mysql server所在的機器IP地址是192.168.0.108&#xff0c;登錄賬戶就用root123456在mysql中創建test數據庫在test數…

Win10 注冊IIs4.0的解決方案

隨著Win10的出現&#xff0c;越來越多的人裝上了Win10&#xff0c;尤其是程序員&#xff0c;由于Win10是一個新的操作系統&#xff0c;但現有軟件的兼容性等各方面都是未知&#xff0c;難免會存在很多坑&#xff0c;就拿IIS來說&#xff0c;我剛裝完win10系統&#xff0c;然后裝…

HUST-2015 Multi-University Training Contest 9

2015 Multi-University Training Contest 9 solutions BY xudyh 1001.Expression 記dp_{l,r}dp?l,r??表示l,rl,r這段數能形成的答案總和。 枚舉最后一步操作kk&#xff0c;如果是乘法&#xff0c;答案為dp_{l,k}*dp_{k1,r}dp?l,k???dp?k1,r??&#xff0c;由于分配率這…

mysql強制禁止使用索引_MYSQL強制使用索引和禁止使用索引

MySQL強制索引和禁止某個索引1、mysql強制使用索引:force index(索引名或者主鍵PRI)例如:select * from table force index(PRI) limit 2;(強制使用主鍵)select * from table force index(ziduan1_index) limit 2;(強制使用索引"ziduan1_index")select * from table …