如果我有一个字符列表:
a = ['a','b','c','d']
Run Code Online (Sandbox Code Playgroud)
如何将其转换为单个字符串?
a = 'abcd'
Run Code Online (Sandbox Code Playgroud) 如果我将数据帧传递给函数并在函数内修改它,它是按值传递还是按引用传递?
我运行以下代码
a = pd.DataFrame({'a':[1,2], 'b':[3,4]})
def letgo(df):
df = df.drop('b',axis=1)
letgo(a)
Run Code Online (Sandbox Code Playgroud)
a
函数调用后,值不会改变.这是否意味着它是传值?
我也试过以下
xx = np.array([[1,2], [3,4]])
def letgo2(x):
x[1,1] = 100
def letgo3(x):
x = np.array([[3,3],[3,3]])
Run Code Online (Sandbox Code Playgroud)
事实证明letgo2()
确实发生了变化xx
而letgo3()
没有变化.为什么会这样?
我注意到有一个比较运算符is not
.我应该把它翻译成
!=
Run Code Online (Sandbox Code Playgroud)
代替
== not
Run Code Online (Sandbox Code Playgroud) 我正在阅读The Hitchhiker的Python指南,还有一个简短的代码片段
foo = 'foo'
bar = 'bar'
foobar = foo + bar # This is good
foo += 'ooo' # This is bad, instead you should do:
foo = ''.join([foo, 'ooo'])
Run Code Online (Sandbox Code Playgroud)
作者指出''.join()
并不总是比它快+
,所以他并不反对使用+
字符串连接.
但为什么foo += 'ooo'
不好的做法却被foobar=foo+bar
认为是好的?
foo += bar
好?foo = foo + 'ooo'
好?在此代码片段之前,作者写道:
关于字符串的最后一件事是使用join()并不总是最好的.在您从预定数量的字符串创建新字符串的实例中,使用加法运算符实际上更快,但在上述情况下或者在您添加到现有字符串的情况下,使用join()应该是你喜欢的方法.
在python中,如果我有一个包含许多元素的元组,它的哈希值是根据元素的元素id
还是元素的内容计算的?
在这个例子中,
a = (1, [1,2])
hash(a)
Run Code Online (Sandbox Code Playgroud)
它错误地说列表是不可用的.所以我猜它不是由id计算的,或者可能是检查元素是否可变.
现在看这个例子
class A: pass
a0 = A()
ta = (1, a0)
hash(ta) # -1122968024
a0.x = 20
hash(ta) # -1122968024
Run Code Online (Sandbox Code Playgroud)
事实证明,散列ta
不随其元素的修改而改变,即a0
.那么也许a0
用于哈希计算的id?被a0
莫名其妙地认为是不可变的?python如何知道类型是否可变?
现在考虑这个案例
b = (1, 2)
id(b) # 3980742764
c = (1, 2)
id(c) # 3980732588
tb = (1, b)
tc = (1, c)
hash(tb) # -1383040070
hash(tc) # -1383040070
Run Code Online (Sandbox Code Playgroud)
似乎哈希计算的内容b
和c
用于哈希计算.
我该如何理解这些例子?
我想在我的等高线图中使用白色绘制x=0
和y=0
轴.如果这太麻烦了,我想要一个白点来表示原点.
我的等高线图如下所示,下面给出了创建它的代码.
xvec = linspace(-5.,5.,100)
X,Y = meshgrid(xvec, xvec)
fig = plt.figure(figsize=(6, 4))
contourf(X, Y, W,100)
plt.colorbar()
Run Code Online (Sandbox Code Playgroud)
我遇到了有关python增强任务的有趣内容 +=
似乎是自动数据类型转换并不总是a += b
如果a是一个'更简单'的数据类型,而a = a + b
似乎总是工作
转换完成的情况
a = 1
b = 1j
a = 1
b = 0.5
Run Code Online (Sandbox Code Playgroud)
没有进行转换的情况
from numpy import array
a = array([0, 0 ,0])
b = array([0, 0, 1j])
Run Code Online (Sandbox Code Playgroud)
之后a += b
,a
仍然是整数矩阵,而不是复数矩阵
我以前认为a += b
是相同a = a + b
的,它们在底层实现中的区别是什么?
我已经为ViewSet定义了自定义操作
from rest_framework import viewsets
class UserViewSet(viewsets.ModelViewSet):
@action(methods=['get'], detail=False, permission_classes=[permissions.AllowAny])
def gender(self, request):
....
Run Code Online (Sandbox Code Playgroud)
并且以常规方式将视图集注册到url
from django.conf.urls import url, include
from rest_framework import routers
from api import views
router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet, base_name='myuser')
urlpatterns = [
url(r'^', include(router.urls)),
]
Run Code Online (Sandbox Code Playgroud)
该网址/api/users/gender/
有效。但是我不知道如何reverse
在单元测试中使用它。(我当然可以对此URL进行硬编码,但是从代码中获取它会很好)
根据django文档,以下代码应该工作
reverse('admin:app_list', kwargs={'app_label': 'auth'})
# '/admin/auth/'
Run Code Online (Sandbox Code Playgroud)
但是我尝试了以下方法,但它们不起作用
reverse('myuser-list', kwargs={'app_label':'gender'})
# errors out
reverse('myuser-list', args=('gender',))
# '/api/users.gender'
Run Code Online (Sandbox Code Playgroud)
在django-restframework文档中,有一个名为的函数reverse_action
。但是,我的尝试没有用
from api.views import UserViewSet
a = UserViewSet()
a.reverse_action('gender') # error out
from …
Run Code Online (Sandbox Code Playgroud)