<td id="6000o"><rt id="6000o"></rt></td>
  • <sup id="6000o"><button id="6000o"></button></sup>
  • <optgroup id="6000o"></optgroup>
  • <strong id="6000o"></strong>
  • Python知識分享網 - 專業的Python學習網站 學Python,上Python222
    python 星號(*) 還能這么用
    發布于:2023-06-26 15:12:46

    今天跟大家介紹一下 python 當中星號(*)的一些用法

    首先大家最常見的就是在 python 中 * 是乘法運算符,實現乘法

     

    sum = 5 * 5 # 25
    

     

    除此之外,還有一種常見的用法就是 * 號操作符在函數中的用法

    • 單星號(*)在函數中用法

    舉個例子,你有一個函數,用來實現兩個數求和

     

    def add(num1, num2):
        return num1 + num2
    
    print(add(1,2)) # 3
    

     

    上面這個函數只能接收固定個數(兩個)的參數,那如果我想要求任意數量的值的和該怎么辦?

    可以在形參部分加一個 * 號

     

    def add(*num):
    	sum = 0
    	for i in num:
            sum += i
       	return sum
    

     

    在函數定義的時候形參前面加一個 * 號,就可以用任意數量的參數來調用函數,如果檢查數據類型,會發現 num 是一個元組(tuple)

    即將所有傳入函數的位置參數打包成一個元組

     

    #使用任意數量的參數來調用函數
    add(1, 2, 3, 4) # 10
    

     

    那如果函數在定義的時候就已經固定了形參的個數

     

    def add(num1, num2, num3):
        return num1 + num2 + num3
    

     

    我們想要傳遞一個列表參數(假設這個列表有三個元素),可以這么調用函數

     

    my_list = [1, 2, 3]
    add(my_list[0], my_list[1], my_list[2])
    

     

    這樣子調用要多敲幾個鍵盤,多麻煩。我們用 * 號來實現,前面我們看到 * 可以用在函數定義的時候的用法

    在函數調用的時候加一個 * 號可以將一個列表或元組解構成多個變量

     

    my_list = [1, 2, 3]
    add(*my_list)
    

     

    • 雙星號(**)在函數中的用法

    上面我們介紹了 * 操作符在函數定義的時候可以用來接收多個參數,并且將參數打包成一個元組,在函數調用的時候可以對列表或者元組中的元素進行解構

    那如果對象是字典,我們可以使用雙星號操作符(**

    舉個例子,假設有下面的函數

     

    def user_info(username, email, phone, date_of_birth):
        user = get_user(username)
        user.email = email
        user.phone = phone
        ...
    

     

    如果我們用關鍵字參數(keyword arguments,kwargs)調用它,就是下面的效果

     

    user_info('kanye', email='blog@example.com', phone='88888', date_of_birth='2000.08.15')
    

     

    那如果我需要增加傳參個數,我就不得不去函數定義那里添加形參,這么做太麻煩了

    我們可以這么做,我們在 kwargs 形參前面加了雙星號,用于接收任意數量的關鍵字參數

     

    def user_info(username, **kwargs):
        user = get_user(username)
        user.email = kwargs['email']
        user.phone = kwargs['phone']
        ...
    

     

    在形參中,**kwargs 的關鍵是雙星號,你完全可以使用其他名字例如 **usr(還是建議用 kwargs)

    在函數定義中,**操作符會把傳進來的參數打包成字典

    當然,我們可以像使用 Python 中的其他字典一樣使用 kwargs 字典,這樣會使代碼更簡潔易懂

     

    def user_info(username, **kwargs):
        user = get_user(username)
        for k,v in kwargs.items():
        	....
    

     

    除此之外,** 操作符也可以用在函數調用的時候,用于將一個字典解構成多個變量

     

    dict = {
    	'email':"blog@example.com"
    	'phone':"88888"
        ...
    }
    
    user_info(username,**dict)
    

     

    • 單星號接收非關鍵字參數

    在函數定義的時候,單星號可以獨立使用,不需要變量(參數)名稱,在Python中是一個完全有效的函數定義

     

    def my_function(*, keyword_arg):
        ...
    

     

    在上面的函數定義中,* 號參數會接收所有非關鍵字參數(位置參數),然后剩下的關鍵字參數傳給 keyword_arg

    如果你在調用的時候只傳了位置參數,就會報錯

     

    my_function(1)
    """
    TypeError: my_function() takes 0 positional arguments but 1 was given
    """
    

     

    在上面代碼中,函數my_function定義了一個命名關鍵字參數keyword_arg,但在函數調用時使用位置參數 1 來傳遞參數,而不是使用關鍵字參數的方式,所以報錯

    函數定義中,使用*來標識位置參數結束,之后的參數都被視為命名關鍵字參數,這意味著在函數調用時必須傳遞關鍵字參數

    那如果我們想強制只使用位置參數,而不是上面案例中的只使用關鍵字參數該怎么辦

    我們使用 / 號來實現

     

    def only_positional_arguments(arg1, arg2, /):
        ...
    

     

    如果你傳遞關鍵字參數,會發生報錯,是不是很有意思

     

    only_positional_arguments(arg1=1, arg2=2)
    
    """
    TypeError: only_positional_arguments() got some positional-only arguments passed as keyword arguments: 'arg1, arg2'
    """
    

     

    • 星號拓展用法

    1、單星號構建或解構列表

    比如說有下面兩個列表

     

    my_list_1 = [1, 2, 3]
    my_list_2 = [10, 20, 30]
    

     

    我們打算合并這兩個列表,可以用 + 操作符

     

    merged_list = my_list_1 + my_list_2
    

     

    但是單星號更靈活,比如說我們在合并的時候在中間加一個元素

     

    num=42
    merged_list = [*my_list_1, some_value, *my_list_2]
    

     

    我們知道,解構列表元素的時候可以這么干

     

    my_list = [1, 2, 3]
    a, b, c = my_list
    
    # a -> 1
    # b -> 2
    # c -> 3
    

     

    上面每個變量都存儲了列表中的元素,那假設我打算將列表中的第一個和最后一個元素放在指定變量中,中間的元素還是作為列表,我該怎么辦

    可以使用單星號

     

    my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    a, *b, c = my_list
    
    # a -> 1
    # b -> [2, 3, 4, 5, 6, 7, 8, 9]
    # c -> 10
    

     

    需要注意的是,單星號接收的對象是列表

     

    my_list = [1, 2, 3]
    a, *b, c = my_list
    
    # a -> 1
    # b -> [2]
    # c -> 3
    

     

    2、雙星號構建字典

    同理,雙星號可以用于構建字典

     

    dict1 = {
        'age': '22'
    }
    
    dict2 = {
        'email': 'blog@example.com'
    }
    
    user_dict = {'username': 'kanye', **dict1, **dict2}
    

     

    轉載自:https://www.cnblogs.com/edisonfish/p/17493391.html
    欧美精品18videosex性欧美,老师的粉嫩小又紧水又多,久久国产高潮流白浆免费观看,国产睡熟迷奷系列网站
    <td id="6000o"><rt id="6000o"></rt></td>
  • <sup id="6000o"><button id="6000o"></button></sup>
  • <optgroup id="6000o"></optgroup>
  • <strong id="6000o"></strong>