def print_two(*args):
arg1, arg2 = args
print "arg1: %r, arg2: %r" % (arg1,arg2)
def print_two_again(arg1, arg2):
print "arg1: %r, arg2: %r" % (arg1, arg2)
def print_one(arg1):
print "arg1: %r" % arg1
def print_none():
print "I got nothin"
print_two("Zed","Shaw")
print_two_again("Zed","Shaw")
print_one("First!")
print_none()
默認參數
看下面代碼
1
2
3
4
5
6
7
8
9
10
|
def
stu_register(name,age,country,course):
print
(
"----注冊學生信息------"
)
print
(
"姓名:"
,name)
print
(
"age:"
,age)
print
(
"國籍:"
,country)
print
(
"課程:"
,course)
stu_register(
"王山炮"
,
22
,
"CN"
,
"python_devops"
)
stu_register(
"張叫春"
,
21
,
"CN"
,
"linux"
)
stu_register(
"劉老根"
,
25
,
"CN"
,
"linux"
)
|
發現 country 這個參數 基本都 是"CN", 就像我們在網站上注冊用戶,像國籍這種信息,你不填寫,默認就會是 中國, 這就是通過默認參數實現的,把country變成默認參數非常簡單
1
|
def
stu_register(name,age,course,country
=
"CN"
):
|
這樣,這個參數在調用時不指定,那默認就是CN,指定了的話,就用你指定的值。
另外,你可能注意到了,在把country變成默認參數后,我同時把它的位置移到了最后面,為什么呢?
關鍵參數
正常情況下,給函數傳參數要按順序,不想按順序就可以用關鍵參數,只需指定參數名即可,但記住一個要求就是,關鍵參數必須放在位置參數之后。
1
|
stu_register(age
=
22
,name
=
'alex'
,course
=
"python"
,)
|
非固定參數
若你的函數在定義時不確定用戶想傳入多少個參數,就可以使用非固定參數
1
2
3
4
5
6
7
8
9
10
|
def
stu_register(name,age,
*
args):
# *args 會把多傳入的參數變成一個元組形式
print
(name,age,args)
stu_register(
"Alex"
,
22
)
#輸出
#Alex 22 () #后面這個()就是args,只是因為沒傳值,所以為空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
)
#輸出
# Jack 32 ('CN', 'Python')
|
還可以有一個**kwargs
1
2
3
4
5
6
7
8
9
10
|
def
stu_register(name,age,
*
args,
*
*
kwargs):
# *kwargs 會把多傳入的參數變成一個dict形式
print
(name,age,args,kwargs)
stu_register(
"Alex"
,
22
)
#輸出
#Alex 22 () {}#后面這個{}就是kwargs,只是因為沒傳值,所以為空
stu_register(
"Jack"
,
32
,
"CN"
,
"Python"
,sex
=
"Male"
,province
=
"ShanDong"
)
#輸出
# Jack 32 ('CN', 'Python') {'province': 'ShanDong', 'sex': 'Male'}
|
局部變量
1
2
3
4
5
6
7
8
9
10
11
|
name
=
"Alex Li"
def
change_name(name):
print
(
"before change:"
,name)
name
=
"金角大王,一個有Tesla的男人"
print
(
"after change"
, name)
change_name(name)
print
(
"在外面看看name改了么?"
,name)
|
輸出
1
2
3
|
before change: Alex Li
after change 金角大王,一個有Tesla的男人
在外面看看name改了么? Alex Li
|
全局與局部變量
在子程序中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。
當全局變量與局部變量同名時:
在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。