鱼C论坛

 找回密码
 立即注册
查看: 1222|回复: 11

[已解决]函数返回参数变量名的方法

[复制链接]
发表于 2018-1-23 21:43:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
初学python,今天写课后作业的时候突然想到对这个程序

>>> import random
>>> x = random.randint(1,10)
>>> y = random.randint(1,10)
>>> z = random.randint(1,10)
>>> def small_one(x,y,z):
        small = x if (x<y and x<z) else (y if y < z else z)
        return(small)

>>> small_one(x,y,z)
1
>>> x
1
>>> y
2
>>> z
4

因为x,y,z都是随机的,我无法知道他们具体的值是多少,程序返回的只是最小的值,并不能反馈出是哪个参数最小,
有什么办法能把程序的参数变量名一些返回出来

比如最后返回出的就是small_one(x,y,z)
                                   x = 1
最佳答案
2018-1-24 01:35:28
本帖最后由 yjsx86 于 2018-1-24 04:48 编辑

虽然可以这么做 但是不建议 因为传给函数的其实是内存地址 而非变量名
可以实现这个功能 但确实是没意义
  1. import random

  2. def small_one(ag1, ag2, ag3):
  3.     small = ag1 if (ag1 < ag2 and ag1 < ag3) else (ag2 if ag2 < ag3 else ag3)
  4.     for name in globals():
  5.         if id(small) == id(globals()[name]):
  6.             return name

  7. for i in range(10):
  8.     x,y,z = random.choices(range(10),k=3)
  9.     string = 'x=%d,y=%d,z=%d 最小数的变量名是 : %s' % (x,y,z,small_one(x,y,z))
  10.     print(string)

  11. # 结果
  12. # 这里的结果有点问题,会出现形如
  13. # x=3,y=4,z=3 最小数的变量名是 : i ,这里的 i 是for循环那里的 i
  14. # 当最小数是 3 , i 也刚好循环到3时会发生 这里你需要再做一次判定了

  15. x=9,y=8,z=2 最小数的变量名是 : z
  16. x=5,y=5,z=4 最小数的变量名是 : z
  17. x=5,y=5,z=0 最小数的变量名是 : z
  18. x=3,y=4,z=3 最小数的变量名是 : i
  19. x=1,y=8,z=2 最小数的变量名是 : x
  20. x=5,y=6,z=0 最小数的变量名是 : z
  21. x=6,y=2,z=5 最小数的变量名是 : y
  22. x=3,y=1,z=1 最小数的变量名是 : y
  23. x=9,y=2,z=7 最小数的变量名是 : y
  24. x=0,y=7,z=0 最小数的变量名是 : x
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-23 21:57:16 | 显示全部楼层
你要返回一个表达式?自能返回字符串吧!
你在后面加个if判断哪个和small相等就行了(可能有重复)  然后组合成一个字符串返回就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:07:04 | 显示全部楼层
  1. def small_one(x,y,z):
  2.     list1=[x,y,z]
  3.     list2=['x','y','z']
  4.     s=min(list1)
  5.     n=list1.index(s)
  6.     print('最小%s=%d'%(list2[n],s))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-23 22:11:48 | 显示全部楼层
太阳花田 发表于 2018-1-23 21:57
你要返回一个表达式?自能返回字符串吧!
你在后面加个if判断哪个和small相等就行了(可能有重复)  然后 ...

你可能曲解了我的意思,我的意思是,我想要知道有没有办法能返回函数参数变量的变量名,
就是small_one(变量名1,变量名2,变量名3)
当我算出变量值谁是最小的时候,我有没有办法获取对应的变量名。
我最后在print(变量名=变量值)就是了
因为我这个三个参数都是随机的,然后也可以不一定是x,y,z,也可能是a,b,c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:11:54 | 显示全部楼层

这个有相同的也只能返回一个吧!没法全部返回。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-23 22:13:47 | 显示全部楼层

你这个是固定死了,x,y,z,我如果传的参数叫a,b,c 那你得跟着改代码,我就是想知道有没有办法获取变量名
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:16:19 | 显示全部楼层
aboutdo 发表于 2018-1-23 22:13
你这个是固定死了,x,y,z,我如果传的参数叫a,b,c 那你得跟着改代码,我就是想知道有没有办法获取变量 ...

好吧,没想到你是纠结于这个,那传参的时候肯定得录入变量名吧,
利用input吧,,我觉得变量名没什么特别意义
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:18:10 | 显示全部楼层
太阳花田 发表于 2018-1-23 22:11
这个有相同的也只能返回一个吧!没法全部返回。

恩,懒得写了,再加个循环又麻烦= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-23 22:19:48 | 显示全部楼层
塔利班 发表于 2018-1-23 22:16
好吧,没想到你是纠结于这个,那传参的时候肯定得录入变量名吧,
利用input吧,,我觉得变量名没什么特 ...

因为你看我的对这几个变量的定义都是取得随机数嘛,所以比出来一个数值,我也不知道这个值到底属于哪个变量。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:21:25 | 显示全部楼层
aboutdo 发表于 2018-1-23 22:11
你可能曲解了我的意思,我的意思是,我想要知道有没有办法能返回函数参数变量的变量名,
就是small_one( ...

所以说你这样还得要求加入input来传参啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-23 22:33:23 | 显示全部楼层
如果你说的是要返回参数名,那中间变量完全和你开始输入的变量名没关系,用字符串变量接收你的输入最后Print
就完事了,,感觉挺尴尬= =
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-24 01:35:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 yjsx86 于 2018-1-24 04:48 编辑

虽然可以这么做 但是不建议 因为传给函数的其实是内存地址 而非变量名
可以实现这个功能 但确实是没意义
  1. import random

  2. def small_one(ag1, ag2, ag3):
  3.     small = ag1 if (ag1 < ag2 and ag1 < ag3) else (ag2 if ag2 < ag3 else ag3)
  4.     for name in globals():
  5.         if id(small) == id(globals()[name]):
  6.             return name

  7. for i in range(10):
  8.     x,y,z = random.choices(range(10),k=3)
  9.     string = 'x=%d,y=%d,z=%d 最小数的变量名是 : %s' % (x,y,z,small_one(x,y,z))
  10.     print(string)

  11. # 结果
  12. # 这里的结果有点问题,会出现形如
  13. # x=3,y=4,z=3 最小数的变量名是 : i ,这里的 i 是for循环那里的 i
  14. # 当最小数是 3 , i 也刚好循环到3时会发生 这里你需要再做一次判定了

  15. x=9,y=8,z=2 最小数的变量名是 : z
  16. x=5,y=5,z=4 最小数的变量名是 : z
  17. x=5,y=5,z=0 最小数的变量名是 : z
  18. x=3,y=4,z=3 最小数的变量名是 : i
  19. x=1,y=8,z=2 最小数的变量名是 : x
  20. x=5,y=6,z=0 最小数的变量名是 : z
  21. x=6,y=2,z=5 最小数的变量名是 : y
  22. x=3,y=1,z=1 最小数的变量名是 : y
  23. x=9,y=2,z=7 最小数的变量名是 : y
  24. x=0,y=7,z=0 最小数的变量名是 : x
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-17 19:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表