Python 初始化对象求助 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
mikefy
V2EX    Python

Python 初始化对象求助

  •  1
     
  •   mikefy 2018-09-04 10:17:12 +08:00 3029 次点击
    这是一个创建于 2665 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我要初始化一个 python 对象,但是有很多个参数.

    1.可以按照顺序放进去,比如 person(a,b,c,d,e,f,g),而这些参数是需要我计算的, 所以我需要这样写 person(func(1),func(2),func(3)...).

    2.所以有没有什么方法来简化这个代码, 比如可以在里面写个循环之类的几个语句把所有的参数都放进去了.

    3.另,不用 args 或者 kwargs。说的有点乱,大家将就一下看吧...

    16 条回复    2018-09-04 17:27:36 +08:00
    HelloAmadeus
        1
    HelloAmadeus  
       2018-09-04 10:32:51 +08:00   1
    用装饰器解决
    mikefy
        2
    mikefy  
    OP
       2018-09-04 10:34:05 +08:00
    @HelloAmadeus 学艺不精啊, 大佬能说细一点吗?
    huaerxiela
        3
    huaerxiela  
       2018-09-04 10:45:26 +08:00   1
    params = [func(i) for i in range(1, 7)]
    person(*params)
    是这个意思吗你
    mikefy
        4
    mikefy  
    OP
       2018-09-04 10:51:21 +08:00
    @huaerxiela 嗯嗯, 这确实是一个办法!赞一个, 楼上说的装饰器你了解吗?
    huaerxiela
        5
    huaerxiela  
       2018-09-04 10:55:15 +08:00
    @mikefy 至于他说的装饰器,如果我没理解错你的需求的话,个人并不认为这个地方该装饰器发挥
    alvin666
        6
    alvin666  
       2018-09-04 11:07:27 +08:00 via Android   1
    三楼不就是 arg 吗...(小声逼逼)
    另外装饰器这里用不到,不过别的地方挺有用的,lz 可以看看
    morefreeze
        7
    morefreeze  
       2018-09-04 11:11:07 +08:00   1
    你如果参数都是经过同一个 func 函数,为什么直接把参数传进去,比如传个 person([1..3]) 这样,进去后再依次调用 map(func, arg)
    如果每个参数的函数不同,那你必然要写个 a1=func1(1), a2=func2(2) 这是跑不掉的,你放哪也得这么写,没什么好省的

    或者你先用笨办法写,哪里出现了重复再着手去简化,现在从题面上看都是 func,那只要传 func 的参数们就好了
    huaerxiela
        8
    huaerxiela  
       2018-09-04 11:11:07 +08:00
    @alvin666 大声三五瓶呀
    xiaket
        9
    xiaket  
       2018-09-04 11:16:34 +08:00   1
    写一个类方法, 在里面接受一群参数, 最后给一个实例出来
    mikefy
        10
    mikefy  
    OP
       2018-09-04 11:24:39 +08:00
    @alvin666
    @huaerxiela 我还以为装饰器在这里能用到呢. 这个*在这里是解包吧, 之前没想到, 我问题里面的意思是不去修改类的初始化方法成*args
    mikefy
        11
    mikefy  
    OP
       2018-09-04 11:29:58 +08:00
    @morefreeze 原来方法有那么多! 请收下我的膝盖!
    huaerxiela
        12
    huaerxiela  
       2018-09-04 11:30:38 +08:00
    @mikefy 这部分是基础你多多巩固才行,还有一些高阶函数,高效编程技巧都是需要了解的,哪怕去百度谷歌也要有个快捷切入点不是
    mikefy
        13
    mikefy  
    OP
       2018-09-04 11:36:12 +08:00
    @huaerxiela 是啊, 正在做小功能呢, 基础估计要重新巩固下
    zhzer
        14
    zhzer  
       2018-09-04 13:05:38 +08:00
    闭包呗
    d18
        15
    d18  
       2018-09-04 14:13:59 +08:00
    让 func 能接收多个参数,然后结果也返回多个,person(*func(1,2,3,4))。
    不过好像都差不多......其实不用太纠结这些语法技巧,意义不大。
    jiangbingo
        16
    jiangbingo  
       2018-09-04 17:27:36 +08:00
    1 形成可迭代参数表,传入解包
    2 map(func, arg list)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2501 人在线   最高记录 669       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 30ms UTC 10:43 PVG 18:43 LAX 02:43 JFK 05:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86