Найти - Пользователи
Полная версия: Способ передачи аргументов для функции и методов Python
Начало » Python для новичков » Способ передачи аргументов для функции и методов Python
1
mind_mixer
Друзья, особенно те, кто программирует на 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 (или просто сторонняя документация) или следует изучать реализацию функции и на основании её уже делать выводы, что передавать можно, а что нельзя. Извиняюсь за некоторую сумбурность вопроса, но надеюсь суть того, что я спрашиваю я изложил.
Shaman
Без четкой цели пиши как обычно.
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)
4kpt
mind_mixer
Надуманный вопрос…
FishHook
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
JOHN_16
4kpt
Надуманный вопрос…
+1

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

Хорошо, спасибо. Перечитаю Лутца
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB