目前我的代码中有很多python对象,类似于以下内容:
class MyClass():
def __init__(self, name, friends):
self.myName = name
self.myFriends = [str(x) for x in friends]
Run Code Online (Sandbox Code Playgroud)
现在我想把它变成一个Django模型,其中self.myName是一个字符串字段,self.myFriends是一个字符串列表.
from django.db import models
class myDjangoModelClass():
myName = models.CharField(max_length=64)
myFriends = ??? # what goes here?
Run Code Online (Sandbox Code Playgroud)
由于列表是python中常见的数据结构,我希望它有一个Django模型字段.我知道我可以使用ManyToMany或OneToMany关系,但我希望避免代码中的额外间接.
编辑:
我添加了这个相关的问题,人们可能觉得有用.
如何在python中判断文件是否为二进制(非文本)?我在python中搜索大量文件,并继续在二进制文件中获取匹配.这使得输出看起来非常混乱.
我知道我可以使用grep -I,但是我使用的数据比grep允许的更多.
在过去,我会搜索大于0x7f的字符,但utf8等在现代系统中使这不可能.理想情况下,解决方案会很快,但任何解决方案都可以.
为什么在类上定义__getitem__使其可迭代?
例如,如果我写:
class b:
def __getitem__(self, k):
return k
cb = b()
for k in cb:
print k
Run Code Online (Sandbox Code Playgroud)
我得到输出:
0
1
2
3
4
5
6
7
8
...
Run Code Online (Sandbox Code Playgroud)
我真的希望看到"for c in cb:"中返回的错误
我知道我可以用这个来计算字符串中的前导空格:
>>> a = " foo bar baz qua \n"
>>> print "Leading spaces", len(a) - len(a.lstrip())
Leading spaces 3
>>>
Run Code Online (Sandbox Code Playgroud)
但是有更多的pythonic方式吗?
我需要在Python中执行一个简单的任务,即将字符串转换为全部小写并删除所有非ascii非字母字符.
例如:
"This is a Test" -> "thisisatest"
"A235th@#$&( er Ra{}|?>ndom" -> "atherrandom"
Run Code Online (Sandbox Code Playgroud)
我有一个简单的功能来做到这一点:
import string
import sys
def strip_string_to_lowercase(s):
tmpStr = s.lower().strip()
retStrList = []
for x in tmpStr:
if x in string.ascii_lowercase:
retStrList.append(x)
return ''.join(retStrList)
Run Code Online (Sandbox Code Playgroud)
但我不禁想到有更高效,更优雅的方式.
谢谢!
编辑:
感谢所有回答的人.我学会了,并且在某些情况下重新学习了很多python.
在Linux中当我从shell调用python时,它复制了它的环境,并启动了python进程.因此,如果我执行以下操作:
import os
os.environ["FOO"] = "A_Value"
Run Code Online (Sandbox Code Playgroud)
当python进程返回时,FOO(假设它原来是未定义的)仍将是未定义的.有没有办法让python进程(或任何子进程)修改其父进程的环境?
我知道你通常用类似的东西来解决这个问题
source script_name.sh
Run Code Online (Sandbox Code Playgroud)
但这与我的其他要求相冲突.
我在mysql中有一个简单的表,其中包含以下字段:
使用MySQLdb,一个python模块,我想在表中插入一个名称和描述,并获取id.
在伪代码中:
db = MySQLdb.connection(...)
queryString = "INSERT into tablename (name, description) VALUES" % (a_name, a_desc);"
db.execute(queryString);
newID = ???
Run Code Online (Sandbox Code Playgroud) 我想为django模型创建一个新类型的字段,它基本上是一个ListOfStrings.因此,在您的模型代码中,您将拥有以下内容:
models.py:
from django.db import models
class ListOfStringsField(???):
???
class myDjangoModelClass():
myName = models.CharField(max_length=64)
myFriends = ListOfStringsField() #
Run Code Online (Sandbox Code Playgroud)
other.py:
myclass = myDjangoModelClass()
myclass.myName = "bob"
myclass.myFriends = ["me", "myself", "and I"]
myclass.save()
id = myclass.id
loadedmyclass = myDjangoModelClass.objects.filter(id__exact=id)
myFriendsList = loadedclass.myFriends
# myFriendsList is a list and should equal ["me", "myself", "and I"]
Run Code Online (Sandbox Code Playgroud)
您将如何编写此字段类型,并遵循以下规定?
看看Django代码看起来我想要做类似于ForeignKey正在做的事情,但文档很稀疏.
这导致以下问题:
这是来自这个问题.
我在C++中有以下代码片段:
for (int x = -4; x < 5; ++x)
printf("hex x %d 0x%08X\n", x, x);
Run Code Online (Sandbox Code Playgroud)
它的输出是
hex x -4 0xFFFFFFFC
hex x -3 0xFFFFFFFD
hex x -2 0xFFFFFFFE
hex x -1 0xFFFFFFFF
hex x 0 0x00000000
hex x 1 0x00000001
hex x 2 0x00000002
hex x 3 0x00000003
hex x 4 0x00000004
Run Code Online (Sandbox Code Playgroud)
如果我在python中尝试相同的事情:
for x in range(-4,5):
print "hex x", x, hex(x)
Run Code Online (Sandbox Code Playgroud)
我得到以下内容
hex x -4 -0x4
hex x -3 -0x3
hex x -2 -0x2
hex x -1 -0x1 …Run Code Online (Sandbox Code Playgroud) 编程时,我经常发现自己需要计算如下内容:
x = (y / n) + (y % n ? 1 : 0);
或者更明确地说:
x = y / n;
if (y % n != 0) {
x = x + 1;
}
Run Code Online (Sandbox Code Playgroud)
是否有更优雅的方式来实现这一价值?可以在不使用条件表达式的情况下实现吗?
python ×9
django ×2
binary ×1
environment ×1
file ×1
inheritance ×1
iterator ×1
linux ×1
math ×1
mysql ×1
overloading ×1
string ×1