2011-02-09 3 views
0

Что это делает? дает одно из дополнительных аргументов: ('? OK для перезаписи файла', 2)
ask_okPython - Noob Question - Что значит «Предоставление одного из необязательных аргументов»?

def ask_ok(prompt, retries=4, complaint='Yes or no, please!'): 
    while True: 
     ok = input(prompt) 
     if ok in ('y', 'ye', 'yes'): 
      return True 
     if ok in ('n', 'no', 'nop', 'nope'): 
      return False 
     retries = retries - 1 
     if retries < 0: 
      raise IOError('refusenik user') 
     print(complaint) 

См обучающая:
http://docs.python.org/py3k/tutorial/controlflow.html#default-argument-values

ответ

2

Наборы retries до 2 и оставляет complaint на значение по умолчанию «Да или нет, пожалуйста!». Важным является порядок дополнительных аргументов в первой строке определения функции.

+0

Спасибо, это имеет смысл. – Josh

1

Это функция.

Если вы изучаете python, я рекомендую вам сначала прочитать хорошую книгу, такую ​​как «Learning python». Начните с простого учебника и прочитайте много. После читать много читают все больше и больше. Python - отличный язык для начала программирования. Иногда, как и я, вы будете работать на некоторых других языках, но оставайтесь с python, и у вас могут быть хорошие результаты.

+0

Что не так с Python Tutorial? – Josh

+0

В Python нет ничего плохого. Документы и учебники Python - лучший ресурс в мире. Но узнать (что-нибудь) книги лучше, потому что они следуют некоторой логике. Вы можете найти в http://stackoverflow.com/ книгах, рекомендованных пользователями. Я рекомендую «Learning Python». После хорошего подтасования наслаждайтесь документами!Вы можете узнать по учебникам, но, на мой взгляд, книги лучше. – macm

4

В Python есть несколько типов аргументов:

  • позиционная и ключевое слово
  • имя и произвольный

Функция аргумент в Python является операцией атрибуции, то есть аргументы, назначенные к переменным в пространстве имен функций.

Если у вас есть заявление, как это:

def some_func(pos_arg1, pos_arg2, kw_arg1=1, kw_arg2='test'): 
    print "postional arg 1 =", pos_arg1 
    print "postional arg 2 =", pos_arg2 
    print "keyword arg 1 =", kw_arg1 
    print "keyword arg 2 =", kw_arg2 

позиционных аргументы являются обязательными, и будут назначены в указанном порядке, но ключевые аргументы являются необязательными и могут быть вызваны в любом порядке - когда опущено, названный ключевое слово аргументы принимают объявленные значения по умолчанию (1 и «тест» в примере). До сих пор:

>>> some_func(1) # positional arguments are mandatory 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
TypeError: some_func() takes at least 2 arguments (1 given) 
>>> some_func(1, 2) # this is ok 
postional arg 1 = 1 
postional arg 2 = 2 
keyword arg 1 = 1 
keyword arg 2 = test 
>>> some_func(1, 2, 3) # this is also ok, keyword args may work like positional 
postional arg 1 = 1 
postional arg 2 = 2 
keyword arg 1 = 3 
keyword arg 2 = test 
>>> some_func(1, 2, 3, 4) # this is also ok, keyword args may work like positional 
postional arg 1 = 1 
postional arg 2 = 2 
keyword arg 1 = 3 
keyword arg 2 = 4 
>>> some_func(1, 2, kw_arg2=3) # kyword arguments may be given in any order 
postional arg 1 = 1 
postional arg 2 = 2 
keyword arg 1 = 1 
keyword arg 2 = 3 

Существует проблема с необъявленными аргументами:

>>> some_func(1, 2, 3, 4, 5) 
Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
TypeError: some_func() takes at most 4 arguments (5 given) 

Но вы можете иметь произвольное число аргументов, при помощи специальной формы * и **:

>>> def some_func(pos_arg1, pos_arg2, *args, **kw_args): 
...  print "postional arg 1 =", pos_arg1 
...  print "postional arg 2 =", pos_arg2 
...  print "other positional orgs =", args 
...  print "other keyword args =", kw_args 
... 
>>> some_func(1, 2, 3, 4, 5) # any number of arguments 
postional arg 1 = 1 
postional arg 2 = 2 
other positional orgs = (3, 4, 5) 
other keyword args = {} 
>>> some_func(1, 2, a=3, x=4, y=5) # * and ** are optional 
postional arg 1 = 1 
postional arg 2 = 2 
other positional orgs =() 
other keyword args = {'a': 3, 'x': 4, 'y': 5} 
>>> some_func(1, 2, 'banana', 'orange', 'apple', a=3, x=4, y=5) 
postional arg 1 = 1 
postional arg 2 = 2 
other positional orgs = ('banana', 'orange', 'apple') 
other keyword args = {'a': 3, 'x': 4, 'y': 5} 
>>> 

Аргумент * будет доступен как кортеж позиционных аргументов, а ** будет аргументом ключевого слова ,

Вы можете смешивать все вместе, но есть правило: все аргументы ключевого слова должны быть объявлены после позиционных аргументов, и все произвольные должны быть указаны после именованных.

+0

Благодарим вас за ответ. – Josh

+0

Почему вы должны дать минимум 2 аргумента? – Josh

+0

Потому что именованные позиционные аргументы являются обязательными. Вы можете сделать это необязательным с 'def some_func (* args)'. –

Смежные вопросы