鱼C论坛

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

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

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

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

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

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

如下代码:
def test(name):
    names = name
    return 0

f = test('小明')
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 ?要怎么写 ...

#-*-coding:gbk-*-
class FOO:
    def __init__(self , name):
        self . name = name 
    def test(self):
        print(self . name)
        return 8

xm = FOO('小明')
xh = FOO('小红')
xm . test()
xh . test()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

f = test('小明')
print(f)
    这样不行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

f = test('小明')
print(f)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:21:06 From FishC Mobile | 显示全部楼层
直接加个global names设置个全局变量然后函数外部直接访问
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 00:24:57 | 显示全部楼层
大家都熬夜
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我不想通过 return names 这种方式 因为 return 我要返回另外一个值   谢谢你,这么晚还回复我,感动!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def test(name):
    global names = name
    return 0

f = test('小明')
print(names)

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

def test1(name):
    global names
    names = name


f = test('哈哈')

d = test1('呵呵')

print(names)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

感动! 大家都是夜猫子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

a,f = test('小明')
print(f)
想知道小甲鱼最近在做啥?请访问 -> 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 实现吗?   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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


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

x = fun()
print(x[0])
print(x[1])
print(x[2])
        总之,再多的变量统统都可以通过 return 来反馈,一点都不会有问题!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

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

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

def test2(name):
    names = name
    return 9

f = test1('小明')

d = test2('小红')

print(f)

假如 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

def test2(name):
    names = name
    return 9

f = test1('小明')

d = test2('小红')

print(f)


就像这种 我想通过 d.names 这种方式来访问 test2 函数 里面的names   是不是只能通过 class ?要怎么写呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

你这种形式就是类啊。你所谓的不同的函数其实就是累的不同实例化吧。
再者,想用d.names也只能是通过类的形式了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

明白了,真的很谢谢你。

能再帮我看下4楼回复的 global 方式   
def test(name):
    global names
    names = name
    return 8

def test1(name):
    global names
    names = name
    return 9

f = test('小花')

d = test1('小明')

print(names)

这种方式 我要怎么访问 test1 里面的 names 呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

#-*-coding:gbk-*-
class FOO:
    def __init__(self , name):
        self . name = name 
    def test(self):
        print(self . name)
        return 8

xm = FOO('小明')
xh = FOO('小红')
xm . test()
xh . test()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

    # Accessor methods for N
    def get_n():
        return N

    def set_n(val):
        nonlocal N
        N = val

    # Attach as function attributes
    func.get_n = get_n
    func.set_n = set_n
    return func

f = function()
f()
f.set_n(10)
print(f.get_n())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-15 07:48:41 | 显示全部楼层
学习了................
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 23:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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