在单个元素元组的情况下,需要尾随逗号.
a = ('foo',)
Run Code Online (Sandbox Code Playgroud)
那个有多个元素的元组怎么样?似乎尾随逗号是否存在,它们都是有效的.它是否正确?在我看来,使用尾随逗号更容易编辑.这是一种糟糕的编码风格吗?
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
Run Code Online (Sandbox Code Playgroud) 我有一个非常奇怪的python问题。我已经问过几位同事,他们都不知道这是怎么发生的以及如何解决的。
我有一个从 API 调用中收到的字符串的浅字典,我想将其中的一些值分配给一个新的字典。
这就是第一个 dict 的样子。只是一堆字符串:

我将 dict1 中的一些值分配给 dict2 中的一些键。非常基础
dict2={}
dict2['access_key'] = dict1['access_key']
dict2['secret_access_key'] = dict1['secret_access_key'],
dict2['session_token'] =dict1['session_token'],
dict2['region'] = dict1['region']
Run Code Online (Sandbox Code Playgroud)
然后发生这种情况。“秘密访问密钥”和“session_token”的值被转换成元组。“access_key”和“region”仍然是字符串

我已经尝试将值初始化为字符串,访问元组的第一个条目并将值转换为字符串。所有这一切都没有改变任何事情。似乎该值被分配得很好,然后发生了一些奇怪的事情,将它变成了一个元组
这是我的解释器设置的屏幕截图。我正在使用 Python 3.6

我真的为这个疯狂:-/ 任何帮助将不胜感激
我在课程材料中查看代码,并且必须编写一个函数,将值99添加到a list或tuple.最终代码如下所示:
def f(l):
print(l)
l += 99,
print(l)
f([1,2,3])
f((1,2,3))
Run Code Online (Sandbox Code Playgroud)
这被用来表示不同的东西,但我有点挂在线上l += 99,.这里做的事情,就是创建一个包含99和迭代list,以及tuple支持这样的对象的简单的"加法"来创建一个新的实例/添加了新的元素.
我真正得到的是使用语法创建的是什么element,?如果我喜欢一个分配x = 99,的type(x)会tuple,但如果我尝试运行x = tuple(99)的99是不是可迭代就会失败.所以有:
element,?tuple没有迭代,并以某种方式,映射到那个?编辑:如果有人想知道为什么接受的答案是那个:我的第二个问题的解释成功了.我应该对我的问题更清楚,但这+=实际上让我感到困惑,这个答案包含了相关信息.
它是这样的意思是什么意思:
self.something += ('somethin',)
Run Code Online (Sandbox Code Playgroud)
"+ ="是什么,逗号是什么意思?
考虑下面的代码。逗号分隔时,Python如何解释类RottenFruit?这合法吗?如果是,用例是什么?
from enum import Enum
class Fruit(Enum):
Apple = 4
Orange = 5
Pear = 6
a = Fruit(5)
class RottenFruit(Enum):
Apple = 4,
Orange = 5,
Pear = 6
print(Fruit(5))
print(RottenFruit(5))
Run Code Online (Sandbox Code Playgroud)
输出:
Fruit.Orange
Traceback (most recent call last):
File "...\tests\sandbox.py", line 15, in <module>
print(RottenFruit(5))
File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 291, in __call__
return cls.__new__(cls, value)
File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 533, in __new__
return cls._missing_(value)
File "...\AppData\Local\Programs\Python\Python36\lib\enum.py", line 546, in _missing_
raise ValueError("%r is not a valid %s" % (value, cls.__name__))
ValueError: …Run Code Online (Sandbox Code Playgroud) 我试图从这个网站上抓取标题(https://minerals.usgs.gov/science/mineral-deposit-database/#products)。我正在使用爬行蜘蛛,因为我打算稍后从页面中的每个网址获取更多信息!
但出现 TypeError: 'Rule' 对象不可迭代!这是我使用的代码:
import scrapy
import datetime
import socket
from scrapy.linkextractors import LinkExtractor
from scrapy.spiders import CrawlSpider, Rule
from usgs.items import MineralItem
from scrapy.loader import ItemLoader
class MineralSpider(CrawlSpider):
name = 'mineral'
allowed_domains = ['web']
start_urls = 'https://minerals.usgs.gov/science/mineral-deposit-
database/#products'
rules = (
Rule(LinkExtractor(
restrict_xpaths='//*[@id="products"][1]/p/a'),
callback='parse')
)
def parse(self, response):
it = ItemLoader(item=MineralItem(), response=response)
it.add_xpath('name', '//*[@class="container"]/header/h1/text()')
it.add_value('url', response.url)
it.add_value('project', self.settings.get('BOT_NAME'))
it.add_value('spider', self.name)
it.add_value('server', socket.gethostname())
it.add_value('date', datetime.datetime.now())
return it.load_item()
Run Code Online (Sandbox Code Playgroud)
日志消息:
(base) C:\Users\User\Documents\Python WebCrawling Learing
Projects\usgs\usgs\spiders>scrapy crawl mineral
2018-11-16 17:43:03 …Run Code Online (Sandbox Code Playgroud) 我是 python 和 Django 的新手,正在尝试确定以下代码的工作方式:
return HttpResponseRedirect(reverse('poll_results', args=(p.id,)))
Run Code Online (Sandbox Code Playgroud)
特别是 reverse 函数的第二个参数。看起来它正在将 args 的参数设置为等于元组。为什么我需要一个额外的逗号?
我有一个非常简单的课程:
class Item(object):
def __init__(self, guid, sku, name):
self.guid = guid,
self.sku = sku,
self.name = name
Run Code Online (Sandbox Code Playgroud)
当我创建一个对象时,例如:
item1 = Item('abc123', 1, 'abc1')
Run Code Online (Sandbox Code Playgroud)
我这样做:
print item1.guid
Run Code Online (Sandbox Code Playgroud)
我得到这个输出:
('abc123',)
Run Code Online (Sandbox Code Playgroud)
而不是预期的:
'abc123'
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
PS:name按预期工作!
我的models.py:
class Channel(models.Model):
title = models.CharField(max_length=255)
def snapshot_statistics(self):
new_channel_stat = ChannelStatistic(channel=self)
new_channel_stat.save()
class ChannelStatistic(models.Model):
channel = models.ForeignKey(Channel, on_delete=models.CASCADE)
view_count = models.IntegerField(default=0)
def save(self, *args, **kwargs):
self.view_count = 3,
super(ChannelStatistic, self).save(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
当触发snapshot_stastistics()时,我收到以下错误:
int() argument must be a string, a bytes-like object or a number, not 'tuple'
Run Code Online (Sandbox Code Playgroud)
在django调试中,我可以看到:
values
[(<django.db.models.fields.related.ForeignKey: channel>, None, 35),
(<django.db.models.fields.IntegerField: view_count>, None, (3,)),
Run Code Online (Sandbox Code Playgroud)
django将我对3的赋值视为tupel的view_count属性.
这个行为的问题是什么?我怎么解决呢?
提前致谢!
如何将元组附加到列表中?我正在尝试以下操作:
>>> a = []
>>> a.append(tuple((str("{0}".format(5000)))))
>>> a
[('5', '0', '0', '0')]
Run Code Online (Sandbox Code Playgroud)
预期输出为:
[('5000')]
Run Code Online (Sandbox Code Playgroud)
有人可以帮我解决这个问题吗?
我正在使用 python 2.7,这是我所拥有的。
方法:
def get_phone(self):
digits = filter(str.isdigit, str(self.phone))
if re.match(r'(0|380)\d{9}', digits):
operator = digits[-9:-7]
digits = digits[-7:]
return "+380 ({}) {}".format(opeself.rator, digits)
return None
Run Code Online (Sandbox Code Playgroud)
现在,如果我像这样使用这种方法:
dictionary = {
'phone': User.get_phone()
}
Run Code Online (Sandbox Code Playgroud)
输出是:
{'phone': '+380 (12) 1234567'}
Run Code Online (Sandbox Code Playgroud)
但如果我像这样使用它:
dictionary['phone'] = User.get_phone(),
Run Code Online (Sandbox Code Playgroud)
输出变成一个元组:
{'phone': ('+380 (12) 1234567',)}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
python ×10
python-3.x ×3
django ×2
syntax ×2
tuples ×2
class ×1
scrapy ×1
typeerror ×1
web-scraping ×1