鱼C论坛

 找回密码
 立即注册
查看: 3325|回复: 23

[已解决]怎么取的函数里面的变量呀?

[复制链接]
发表于 2020-3-15 00:10:11 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 wnhuiyou 于 2020-3-15 00:12 编辑

如下代码:

  1. def test(name):
  2.     names = name
  3.     return 0

  4. f = test('小明')
  5. print(f)
复制代码


这样输出来的结果是0,那我想单独输入 函数里面的names 变量 我改怎么写呢?   f.names()  也不对    最好是不用通过 return names 来实现
最佳答案
2020-3-15 01:05:51
wnhuiyou 发表于 2020-3-15 00:53
假如 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写 ...

  1. #-*-coding:gbk-*-
  2. class FOO:
  3.     def __init__(self , name):
  4.         self . name = name
  5.     def test(self):
  6.         print(self . name)
  7.         return 8

  8. xm = FOO('小明')
  9. xh = FOO('小红')
  10. xm . test()
  11. xh . test()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-15 00:13:17 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-15 00:14 编辑
  1. def test(name):
  2.     names = 'hello , ' + name + ' !'
  3.     return names

  4. f = test('小明')
  5. print(f)
复制代码

    这样不行吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:13:31 | 显示全部楼层
直接拿names作为函数的返回值就可以了
  1. def test(name):
  2.     names = name
  3.     return names

  4. f = test('小明')
  5. print(f)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:21:06 From FishC Mobile | 显示全部楼层
直接加个global names设置个全局变量然后函数外部直接访问
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:24:57 | 显示全部楼层
大家都熬夜
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:28:43 | 显示全部楼层

我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:29:19 | 显示全部楼层
sunrise085 发表于 2020-3-15 00:13
直接拿names作为函数的返回值就可以了

我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:32:14 | 显示全部楼层
本帖最后由 wnhuiyou 于 2020-3-15 00:38 编辑
小小小菜菜菜 发表于 2020-3-15 00:21
直接加个global names设置个全局变量然后函数外部直接访问

  1. def test(name):
  2.     global names = name
  3.     return 0

  4. f = test('小明')
  5. print(names)
复制代码


好像可以, 但是 如果多个函数 里面同时有names 我该怎么区分 不同函数里面的 names? 比如再来一个 def tast1(name)
里面和 test一样

  1. def test(dada):
  2.     global names
  3.     names = dada
  4.     return 8

  5. def test1(name):
  6.     global names
  7.     names = name


  8. f = test('哈哈')

  9. d = test1('呵呵')

  10. print(names)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:32:49 | 显示全部楼层

感动! 大家都是夜猫子
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:40:39 | 显示全部楼层
wnhuiyou 发表于 2020-3-15 00:29
我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动!


return可以返回多个值啊,以元组的形式。
  1. def test(name):
  2.     names = name
  3.     return (0,names)

  4. a,f = test('小明')
  5. print(f)
复制代码

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:45:58 | 显示全部楼层
sunrise085 发表于 2020-3-15 00:40
return可以返回多个值啊,以元组的形式。

哎呀,这个可以!  原来还可以这样。

假如 有很多函数 比如 def test1()   def test2() 等等  我想通过 这种 f.names1    d.names2 来获取不同函数里面的不同 names  只能通过 class 实现吗?   
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:46:30 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-15 00:51 编辑
wnhuiyou 发表于 2020-3-15 00:28
我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动


       ruturn 可以返回很多东西的,试试下面的代码
  1. def fun():
  2.     x1 = 'Hello , world'
  3.     x2 = [1 , 2 , 3 , 4 , 5]
  4.     x3 = {"a":"abc" , "1" : "123"}
  5.     return x1 , x2 , x3

  6. x = fun()
  7. print(x[0])
  8. print(x[1])
  9. print(x[2])
复制代码

        总之,再多的变量统统都可以通过 return 来反馈,一点都不会有问题!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:51:54 | 显示全部楼层
wnhuiyou 发表于 2020-3-15 00:45
哎呀,这个可以!  原来还可以这样。

假如 有很多函数 比如 def test1()   def test2() 等等  我想通 ...

不太明白你的意思。什么叫  获取不同函数里的不同的names?
函数和类是完全不同的概念。函数相当于过程块,类相当于一种数据类型
我没太明白你想要完成什么功能
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:53:55 | 显示全部楼层
jackz007 发表于 2020-3-15 00:46
ruturn 可以返回很多东西的,试试下面的代码

        总之,再多的变量统统都可以通过 retur ...
  1. def test1(name):
  2.     names = name
  3.     return 8

  4. def test2(name):
  5.     names = name
  6.     return 9

  7. f = test1('小明')

  8. d = test2('小红')

  9. print(f)
复制代码


假如 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 00:56:21 | 显示全部楼层
sunrise085 发表于 2020-3-15 00:51
不太明白你的意思。什么叫  获取不同函数里的不同的names?
函数和类是完全不同的概念。函数相当于过程 ...
  1. def test1(name):
  2.     names = name
  3.     return 8

  4. def test2(name):
  5.     names = name
  6.     return 9

  7. f = test1('小明')

  8. d = test2('小红')

  9. print(f)
复制代码



就像这种 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 01:00:08 | 显示全部楼层
wnhuiyou 发表于 2020-3-15 00:53
假如 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写 ...

你这种形式就是类啊。你所谓的不同的函数其实就是累的不同实例化吧。
再者,想用d.names也只能是通过类的形式了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-15 01:03:40 | 显示全部楼层
sunrise085 发表于 2020-3-15 01:00
你这种形式就是类啊。你所谓的不同的函数其实就是累的不同实例化吧。
再者,想用d.names也只能是通过类 ...

明白了,真的很谢谢你。

能再帮我看下4楼回复的 global 方式   

  1. def test(name):
  2.     global names
  3.     names = name
  4.     return 8

  5. def test1(name):
  6.     global names
  7.     names = name
  8.     return 9

  9. f = test('小花')

  10. d = test1('小明')

  11. print(names)
复制代码


这种方式 我要怎么访问 test1 里面的 names 呢?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 01:05:51 | 显示全部楼层    本楼为最佳答案   
wnhuiyou 发表于 2020-3-15 00:53
假如 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写 ...

  1. #-*-coding:gbk-*-
  2. class FOO:
  3.     def __init__(self , name):
  4.         self . name = name
  5.     def test(self):
  6.         print(self . name)
  7.         return 8

  8. xm = FOO('小明')
  9. xh = FOO('小红')
  10. xm . test()
  11. xh . test()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 01:15:12 | 显示全部楼层
通过闭包可以实现
  1. def function():
  2.     N = 0
  3.     # closure funciton
  4.     def func():
  5.         print(f"N is -> {N}")

  6.     # Accessor methods for N
  7.     def get_n():
  8.         return N

  9.     def set_n(val):
  10.         nonlocal N
  11.         N = val

  12.     # Attach as function attributes
  13.     func.get_n = get_n
  14.     func.set_n = set_n
  15.     return func

  16. f = function()
  17. f()
  18. f.set_n(10)
  19. print(f.get_n())
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 07:48:41 | 显示全部楼层
学习了................
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-8 18:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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