In Python, in addition to multiplying numeric and exponentiation, there is a special use of "add a single asterisk or two asterisk before a variable" to implement a multi-parameter pass-through or a variable disassembly, which will be described in detail in the use of the asterisk parameter.
First, what is the asterisk variable
Initially, the asterisk variable is used in the function of the parameter pass, in the following instance, a single asterisk to receive any number of non-keyword parameters, in the *b position of the function to convert it to a tuple, and the double star represents this location to receive any number of keyword parameters, in the **b position to convert it into a dictionary:
#!/usr/bin/env python#coding=utf-8#--------def One (a,*b): "" A is a normal incoming parameter, *b is a non-keyword asterisk parameter "" " print (b) One ( 1,2,3,4,5,6) #--------def (a=1,**b): "" " A is an ordinary keyword parameter, **b is a keyword double star" "" print (b) , f=6)
#程序输出
(2, 3, 4, 5, 6) {' B ': 2, ' C ': 3, ' E ': 5, ' F ': 6, ' d ': 4}
#从输出中可以看到, in the first function, the position of *b can pass in any number of arguments without a keyword, *b will convert these incoming parameters into a tuple, the following call
One (1,2,3,4,5,6)
#传入one (a,*b), equivalent to
One (1, (2,3,4,5,6))
#第二个函数中, the **b position can receive any number of keyword arguments, and the following call
Both (a=1,b=2,c=3,d=4,e=5,f=6)
#传入one (a,*b), equivalent to
Both (a=1,{' B ': 2, ' C ': 3, ' E ': 5, ' F ': 6, ' d ': 4})
After understanding the basic usage of the single and double star numbers, let's look at their extended usage.
Second, the single number of variable instances
The single variable can be used not only in the parameter pass of the function, but in fact a common variable using the single prefix, can be split into a single element, see the following example:
#!/usr/bin/env python#coding=utf-8#--------def One (*x): "" " output incoming first parameter" " print (x[0]) #--------lst=[" A "," B "," C "," D "]stri=" www.pythontab.com "one (stri,lst) one (*lst) one (*stri)
#程序输出
Www.pythontab.comaw
#第一次调用one (STRI,LST), substituting one (*x) for equivalence with
One ((["A", "B", "C", "D"], "www.pythontab.com"))
#第二次调用one (*LST), substituting one (*x) for equivalence with
One (("A", "B", "C", "D"))
#第三次调用one (*stri), substituting one (*x) for equivalence with
One ("W", "W", "W", ".", "Q", "I", "N", "G", "s", "w", "O", "R", "D", ".", "C", "O", "M"))
#如果在变量前面使用单星号, it is actually a one-time disassembly of the variable, the individual elements of the variable are disassembled, and then passed in the one () function, and once passed in a () function, the single () function will save these incoming individual elements into a tuple, which is why we print (x [0]) The reason why the first element can be extracted
To verify this, let's modify the one () function, as follows:
#!/usr/bin/env python#coding=utf-8#--------def One (*x): "" " an instance of an error that attempts to modify the first parameter value passed in, throwing an exception" "" print (X[0]) x[0]= "Pythontab" lst=["a", "B", "C", "D"]one (*LST)
#我们知道列表是可以更改的, we split the list into the one () function, try to change the value of the first element inside the function, the result triggers the "TypeError" exception, and you can try it on your own, the reason for this is that the result is shown above, regardless of the original type of the incoming parameter, Once the one (*X) receives these incoming parameters in the *x location, it will be saved as a "tuple" and the tuple cannot be changed.
Let's look at a few more examples:
#!/usr/bin/env python#coding=utf-8#--------def One (*x): "" " prints the Incoming parameter" "" for A in x: print (a) lst=["abc", 123, "www.pythontab.com"]stri= "ABCD" Dect={1: "One", 2: "One", 3: "Three"}one (*LST) One (*stri) one (*dect)
#程序输出
Abc123www.pythontab.comabcd123
#前面两次调用都很好理解, we finally passed in a dictionary element, found that only the key of the dictionary element is output, and does not contain the value, in fact, the single number is not readable to the value of the dictionary, will always read only the keys in the dictionary, if you want to read the values in the dictionary, you need to use the double star
Three, the double star variable instance
At the end of the 2nd section, we use the single number to split a dictionary to a function, but only get the dictionary key, the following shows how to use the double star to get the value of the dictionary:
#!/usr/bin/env python#coding=utf-8#--------def One (**x): "" saves the value of the passed-in keyword parameter narimoto group output "" print (x) b= () For a In X.keys (): b+= (X[a],) print (b) dect={"One": 1, "one": 2, "three": 3}one (**dect)
#程序输出
{' Three ': 3, ' one ': 1, ' both ': 2} (3, 1, 2)
#对一个字典使用双星号前缀, it is equivalent to splitting it into the form of a keyword argument, **dect equivalent to splitting the dictionary into the following way
One=1,two=2,three=3
#将上面这些关键字参数传入one (**X), which is equivalent to (remember previously, the Double star will receive all the keyword parameters are saved into a dictionary bar)
One ({"One": 1, "one": 2, "three": 3})
#既然是字典, then all the methods in the dictionary can be used, using the for loop to iterate through the dictionary keys, and then use a tuple to add the values corresponding to these keys, and finally print out the tuple
Ps: Note that when using this method to pass a dictionary to a function, the name of the dictionary key should conform to the naming rules of the Python variable, it is not difficult to see through the above analysis, the double star will first convert the dictionary into the form of the keyword parameter, the equivalent of using the dictionary key as the variable name, if the key does not conform , a "TypeError" exception is thrown, and you can try to reverse the keys and values in the dictionary above, use numbers as keys, and see what happens.
In the receive parameter of a function, when the "non-keyword parameter (positional parameter)" and "keyword parameter" appear, you can use a single asterisk to separate the two parameters, for example:
#!/usr/bin/env python#coding=utf-8#--------def Mix (a,b,*,x,y): "" " position parameter mixed with keyword parameter" "" " return a,b,x,y# A and B in front of the asterisk are positional parameters, the X and y after the asterisk are the keyword arguments, the mix () function is called and passed into the parameter, the keyword argument must be passed in as "variable name = value", and if the data is passed in the same position parameter, a TypeError exception print (mix (1,2,x=3,y=4))
#程序输出
(1, 2, 3, 4)
#在上面的mix函数中, if a single asterisk positional parameter already exists between the positional parameter and the keyword parameter, then all of this parameter is followed by a keyword argument, and no need to use asterisks to separate them, for example
#!/usr/bin/env python#coding=utf-8#--------def Mix (a,b,*c,x,y): "" " position parameter mixed with keyword parameter" "" " return a,b,c,x,y# in * The position of C can be entered in any number of positional parameter values print (Mix (1,2,3,4,5,x=6,y=7))
#程序输出
(1, 2, (3, 4, 5), 6, 7)
If we want to include a combination of several parameters in a function, we must follow the order: Positional parameter (required parameter), default parameter, single number parameter or asterisk separator, keyword parameter, double star parameter;
Take a look at the following example:
#!/usr/bin/env python#coding=utf-8#--------def Mix (a,b=0,*c,x,**y): "" " position parameter mixed with keyword parameter" "" " return a,b,c,x, Yprint (Mix (1,2,3,4,5,x=6,y=7,z=8))
#程序输出
(1, 2, (3, 4, 5), 6, {' Y ': 7, ' Z ': 8})