怎么转成普通变量?
我有这么一个需求,原函数代码
def index(request):
remen = Article.objects.filter(tui__id=1)
因为 remen = Article.objects.filter(tui__id=1) 里面的 tui__id=1 有时候会经常变,而且又不能是字符串,我的想法是 怎么通过如下方式来传递
def index(request, tt):
remen = Article.objects.filter(tt)
index('tui__id=1')
但是这样会报错,因为不支持字符串,有什么其他的办法吗? 你试试修改为tt='tui_id=1'看看行不 本帖最后由 suchocolate 于 2020-9-18 10:27 编辑
def index(request, tt):
remen = Article.objects.filter(tui__id=tt)
index(1)
你是要修改index函数让其能够识别传递过来的tt参数吗?
可以试试将 remen = Article.objects.filter(tt)
改为
remen = Article.objects.filter(exec(tt))
这样当你调用 index('tui__id=1') 的时候,在index函数中执行的就是remen = Article.objects.filter(tui__id=1) bonst 发表于 2020-9-18 10:22
你试试修改为tt='tui_id=1'看看行不
这样是的可以但是传过去还是字符串这么把 'tui_id=1'传过去不带引号 suchocolate 发表于 2020-9-18 10:23
这样是没问题的,但是 tui__id 这个变量不是固定的 是可变的 sunrise085 发表于 2020-9-18 10:24
你是要修改index函数让其能够识别传递过来的tt参数吗?
可以试试将
改为
不行, 我做了个测试 def rr(tt):
print(exec(tt))
rr('tui_id=1') 返回结果是None sunrise085 发表于 2020-9-18 10:24
你是要修改index函数让其能够识别传递过来的tt参数吗?
可以试试将
改为
import re
def rr(tt):
tt = re.findall(r"'(.+?)'", tt)
print(tt)
print(type(tt))
rr(tt='tui_id=1')
或者怎么用正则表达式 去除那个单引号, 我把单引号写在里面 没有效果 再加一个中间变量,令char = str(input('请输入你要的变量'))
index(tt=char)
思路是这样的,至于char内的内容哪里来就自己决定了,输入也好,其他方式传入也好 bonst 发表于 2020-9-18 10:44
思路是这样的,至于char内的内容哪里来就自己决定了,输入也好,其他方式传入也好
可以 但是 remen = Article.objects.filter(tt) 不支持字符串要把单引号去掉 sunrise085 发表于 2020-9-18 10:24
你是要修改index函数让其能够识别传递过来的tt参数吗?
可以试试将
改为
而且 remen = Article.objects.filter(tt)里面的 tt 不支持字符串的 你把强制字符串str去掉试试 本帖最后由 sunrise085 于 2020-9-18 11:26 编辑
wnhuiyou 发表于 2020-9-18 11:04
而且 remen = Article.objects.filter(tt)里面的 tt 不支持字符串的
我给你写的那个你试了吗?
exec作用就是将字符串当做式子执行
你试一下下面这个例子
string="print('I Love FishC')"
exec(string)
string2="1+2+3+4"
print(exec(string2))
exec("alf='abcdefg'")
print(alf) wnhuiyou 发表于 2020-9-18 10:43
或者怎么用正则表达式 去除那个单引号, 我把单引号写在里面 没有效果
请把你的问题描述清楚。
第一,调用的时候回事怎么调用,实参是什么形式?
第二,在函数内的时候形参想要以什么形式使用?
我的理解是你的实参是一个字符串,字符串的内容是一个表达式,例如:'tui_id=1'这是实参,是一个字符串,该字符串的内容是一个表达式 tui_id=1。你在函数内的时候,需要使用的是这个表达式,而不是这个字符串。
如果我理解的对的话,那么应该就是这样使用
def index(request, tt):
# tt是字符串 'tui__id=1',但是下面要使用的是字符串的内容 tui__id=1 , 而非字符串本身
remen = Article.objects.filter(exec(tt)) # 这样写实际上执行的是remen = Article.objects.filter(tui__id=1)
index('tui__id=1')#这里传进去的是字符串 sunrise085 发表于 2020-9-18 11:23
请把你的问题描述清楚。
第一,调用的时候回事怎么调用,实参是什么形式?
第二,在函数内的时候形参想 ...
对,你理解没错,就是这个意思,但我按照你说的做 还是出错
开始是这样的 这没有报错
这是我按照你的方式修改的
楼主要搞明白一个问题
function (obj=None)
默认调用,不传参数
调用 func ( obj ) ->这里是传引用的值 例如 obj = 1 , 那么调用是这样的func( obj=1 ) , 如果你想的 obj = 'id=1',func( obj= 'id=1' ) , 参数位置在内部已经固定。
你推荐文章,应该按照一个推荐指数去推荐,文章排序,按照这个升序降序。那么多花里胡哨 sunrise085 发表于 2020-9-18 10:24
你是要修改index函数让其能够识别传递过来的tt参数吗?
可以试试将
改为
你这就是传个 None 啊 wnhuiyou 发表于 2020-9-18 12:02
对,你理解没错,就是这个意思,但我按照你说的做 还是出错
开始是这样的 这没有报错
呃,好吧。我搞错了
现在我发现我错的原因了
exec是直接将字符串当做表达式执行,得到的是表达式执行的结果,而非表达式本身
我尝试了exec,globals()等,还是没成功。
用globals()可以把tui__id添加到变量列表中去,但是还是无法在调用的时候得知该变量的名字。
看看下面这个小例子,我只能想到这里了。问题没解决,但愿能给你思路吧
def fun2(*arg,tui__id):
if tui__id==1:
print("flag is True")
else:
print("flag is False")
def fun(tt):
a,b=tt.split('=')
globals()=int(b) # 这里把 tui__id 作为变量名保存了
print(tui__id) # 这里可以打印出来该变量
fun2(tui__id=tui__id) # 括号内两个 tui__id ,前者是关键字参数形参,后者是变量,但是等号前面这个不知道该怎么获得
fun('tui__id=1')
永恒的蓝色梦想 发表于 2020-9-18 13:36
你这就是传个 None 啊
是的,弄明白问题出在哪儿了
页:
[1]
2