positional arguments
def say(name, message): #name和message都是positional arguments
print(name, 'said:', message)
>> say('Smith', 'Good morning')
>> Smith said: Good morning
可变参数
参数为tuple.
- 编译器自动将输入参数转为tuple
- 但如果传递tuple的话,编译器会在外面再加一层tuple,比如(1,2,3)会变成((1,2,3),), 如果有这样的tuple,需传*tuple
def sum(*numbers):
result = 0
for num in numbers:
result += num
return result
print(sum(1, 2, 3, 4, 89))
>> 99
当传递list时,需要用*解开为单个元素
>> myList = [1, 2, 3, 4, 89]
>> print(sum(*myList))
keyword argument
通过关键字传递参数,参数为dictionary
def say(name, message, **kw):#传递0个或多个keyword argument
print(name, ' said: ', message, ', and ', kw)
say('Smith', 'Good morning', city='Shenzhen', weekday='Tuesday')
>> Smith said: Good morning , and {'weekday': 'Tuesday', 'city': 'Shenzhen'}
通过dictionary传递
>>> dic = {'gendar':'male', 'age':29}
>>> say('Bush', 'Hello', **dic)
>>> Bush said: Hello , and {'gendar': 'male', 'age': 29}
命名关键字参数
跟位置参数差不多,只是参数有了名字。
#name,message为位置参数,*后面是关键字参数,*是分割符,age和city都是keyword
def say(name, message, *, age, city):
print(name, ' said: ', message, ', and: ', age, city)
say('Smith', 'Good morning', city='Shenzhen', age=56)
>> Smith said: Good morning , and: 56 Shenzhen
命令行参数
#打印所有命令行参数
for i in range(len(sys.argv)):
print(sys.argv[i])
打印
$ python3 test.py hello world earth
test.py
hello
world
earth