Уведомления

Группа в Telegram: @pythonsu

#1 Июль 22, 2013 13:28:12

mind_mixer
Зарегистрирован: 2013-07-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

Друзья, особенно те, кто программирует на Python, хотел бы обсудить следующий вопрос, который, как мне кажется в бОльшей степени относится к вопросам начинающих, но всё же. Мне бы хотелось услышать некоторые пояснения или рекомендации: в каком случае какой способ передачи аргументов при вызове функции или метода лучше использовать и/или используйте Вы в своих проектах. И как Вы решаете, как вообще объявлять функцию. Ниже приведён небольшой пример:

def foo(id, name, age, email):
    print id
    print name
    print age
    print email
foo(101, 'Max', 19, 'max@somedomain.org')
print '------'
foo(id=101, name='Max', age=19, email='max@somedomain.org')
print '------'
def bar(**kargs):
    print kargs['id']
    print kargs['name']
    print kargs['age']
    print kargs['email']
bar(id=101, name='Max', age=19, email='max@somedomain.org')
Функция foo объявлена стандартным способом с аргументами id, name, age, email. Функция bar объявлена немного иначе, точнее способ передачи аргументов здесь с помощью **kargs (про *args я тоже в курсе, но решил здесь не приводить как пример) Самая банальная рекомендация, которая следует из моей логики такова: когда непонятно количество аргументов функции (было бы здорово привести примеры из реальных проектов когда так) или очень много аргументов - лучше использовать **kargs. Но при этом, как мне кажется есть один минус, в плане самодокументируемости кода. Т.е. чтобы понять какие аргументы можно передать в функцию нужно чтобы был написан docsting (или просто сторонняя документация) или следует изучать реализацию функции и на основании её уже делать выводы, что передавать можно, а что нельзя. Извиняюсь за некоторую сумбурность вопроса, но надеюсь суть того, что я спрашиваю я изложил.

Отредактировано mind_mixer (Июль 22, 2013 13:30:09)

Офлайн

#2 Июль 22, 2013 13:39:24

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

Без четкой цели пиши как обычно.

def foo(id, name, age, email):
    print(id, name, age, email)
ad = {'id': 1, 'name': 2, 'age': 3, 'email': 4}
foo(*(1,2,3,4))
foo(**ad)

Офлайн

#3 Июль 22, 2013 13:48:04

4kpt
От: Харьков
Зарегистрирован: 2010-11-03
Сообщения: 998
Репутация: +  63  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

mind_mixer
Надуманный вопрос…



Офлайн

#4 Июль 22, 2013 13:50:29

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

mind_mixer,
Вы в своих рассуждениях не принимаете в расчет случая, когда имя аргумента заранее вообще неизвестно. Пример, как Вы просили, из жизни:

#-*- coding:utf-8 -*-
d = dict()
d.update(a=1)
d.update(b=2)
d.update(a_vot_takutu_vot_peremennuyu_nikto_i_nikogda_ne_predpolagal=3)
print d



Офлайн

#5 Июль 22, 2013 23:44:09

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

4kpt
Надуманный вопрос…
+1

mind_mixer
много слов и ни очем. Вместо время которое вы потратили на написание этого поста можно было прочитать об этом в книге Лутца и тп. У вас просто нет понимания того о чем вы пишете. А нету его не потому что вы чего то недопонимаете, а потому что нету базы, фундамента. Мой вам совет не ленится и читать литературу и в качестве практики писать код, пусть велосипеды, ибо на них многое отрабатывается и сами вопросы изживают себя.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Июль 23, 2013 11:24:12

mind_mixer
Зарегистрирован: 2013-07-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Способ передачи аргументов для функции и методов Python

JOHN_16
mind_mixer
много слов и ни очем. Вместо время которое вы потратили на написание этого поста можно было прочитать об этом в книге Лутца и тп. У вас просто нет понимания того о чем вы пишете. А нету его не потому что вы чего то недопонимаете, а потому что нету базы, фундамента. Мой вам совет не ленится и читать литературу и в качестве практики писать код, пусть велосипеды, ибо на них многое отрабатывается и сами вопросы изживают себя.

Хорошо, спасибо. Перечитаю Лутца

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version