我的代码看起来像:
# -*- coding: utf-8 -*-
print ["asdf", "??"]
print ["??"]
print "??"
Run Code Online (Sandbox Code Playgroud)
Eclipse控制台中的输出非常奇怪:
['asdf', '\xe4\xb8\xad\xe6\x96\x87']
['\xe4\xb8\xad\xe6\x96\x87']
??
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:为什么最后一行得到正确的输出,而其他的没有?
我的第二个问题是:如何纠正错误的(使它们输出真实的字符而不是以"x"开头的代码)?
感谢你们!!
我想使用Scapy制作数据包。浏览IP()类成员时,遇到了以下代码惯用法:
'fieldtype': {
'frag': <Field (IP,IPerror).frag>,
'src': <Field (IP,IPerror).src>,
'proto': <Field (IP,IPerror).proto>,
'tos': <Field (IP,IPerror).tos>,
'dst': <Field (IP,IPerror).dst>,
'chksum': <Field (IP,IPerror).chksum>,
'len': <Field (IP,IPerror).len>,
'options': <Field (IP,IPerror).options>,
'version': <Field (IP,IPerror).version>,
'flags': <Field (IP,IPerror).flags>,
'ihl': <Field (IP,IPerror).ihl>,
'ttl': <Field (IP,IPerror).ttl>,
'id': <Field (IP,IPerror).id>},
'time': 1465637588.477862,
'initialized': 1,
'overloaded_fields': {},
Run Code Online (Sandbox Code Playgroud)
我对Python比较陌生。有人可以向我解释尖括号在每种字段类型定义中的作用是什么?
我一直在尝试使用以下文档自己弄清楚这一点,但完全被卡住了。
谢谢
我正在尝试测试返回类型__repr__.它不是一个字符串,它是什么?这里发生了什么事?
import unittest
class MyClass(unittest.TestCase):
class Dog(object):
def __init__(self, initial_name):
self._name = initial_name
def get_self(self):
return self
def __repr__(self):
return "Dog named '" + self._name + "'"
def runTest(self):
fido = self.Dog("Fido")
self.assertEqual("Dog named 'Fido'", fido.get_self()) #Fails!
test=MyClass("runTest")
runner=unittest.TextTestRunner()
runner.run(test)
Run Code Online (Sandbox Code Playgroud)
运行这个给出:
FAIL: runTest (__main__.MyClass)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/home/xxxxx/fido.py", line 15, in runTest
self.assertEqual("Dog named 'Fido'", fido.get_self())
AssertionError: "Dog named 'Fido'" != Dog named 'Fido'
----------------------------------------------------------------------
Ran 1 test in 0.006s
FAILED (failures=1)
Run Code Online (Sandbox Code Playgroud)
我怎样才能通过这项测试?
这个问题更多的是好奇心.
我正在创建以下数组:
A = zeros((2,2))
for i in range(2):
A[i,i] = 0.6
A[(i+1)%2,i] = 0.4
print A
>>>
[[ 0.6 0.4]
[ 0.4 0.6]]
Run Code Online (Sandbox Code Playgroud)
然后,打印它:
for i,c in enumerate(A):
for j,d in enumerate(c):
print j, d
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除j,我得到:
>>>
0 0.6
1 0.4
0 0.4
1 0.6
Run Code Online (Sandbox Code Playgroud)
但如果我从for中删除j,我得到:
(0, 0.59999999999999998)
(1, 0.40000000000000002)
(0, 0.40000000000000002)
(1, 0.59999999999999998)
Run Code Online (Sandbox Code Playgroud)
这是因为我用0.6创建矩阵的方式?它如何代表内部真实价值?
>>> sum(range(49999951,50000000))
2449998775L
Run Code Online (Sandbox Code Playgroud)
有没有办法避免数字末尾的L?
这是我第一次在这个网站上寻求帮助.我在这里寻找答案,但没有什么能真正为我清除.
我正在努力学习Python.我在"课堂"一章.以下代码:
class Character:
def __init__(self, name, initial_health):
self.name = name
self.health = initial_health
self.inventory = []
def __str__(self):
s = "Name: " + self.name
s += "| Health: " + str(self.health)
s += "| Inventory: " + str(self.inventory)
return s
def grab(self, item):
self.inventory.append(item)
me = Character("vic", 37)
me.grab("pencil")
me.grab("paper")
print str(me)
Run Code Online (Sandbox Code Playgroud)
...生产:
Name: vic| Health: 37| Inventory: ['pencil', 'paper']
Run Code Online (Sandbox Code Playgroud)
但是下面的代码,在我看来非常相似,打印出内存位置而不是变量本身:
import random
SUITS = ['C', 'S', 'H', 'D']
RANKS = ['A', '2', '3', '4', '5', '6', '7', '8', …Run Code Online (Sandbox Code Playgroud) 使用以下内容:
class test:
def __init__(self):
self._x = 2
def __str__(self):
return str(self._x)
def __call__(self):
return self._x
Run Code Online (Sandbox Code Playgroud)
然后用.创建一个实例 t = test()
我看到如何__str__用于打印:
>>> print t
2
Run Code Online (Sandbox Code Playgroud)
我可以看到如何使用可调用的对象 __call__
>>> t()
2
Run Code Online (Sandbox Code Playgroud)
但是如何让对象返回一个内部属性,以便在输入时:
>>> t
2
Run Code Online (Sandbox Code Playgroud)
代替:
<__main__.test instance at 0x000000000ABC6108>
Run Code Online (Sandbox Code Playgroud)
以类似的方式Pandas打印出DataFrame对象.
情况:我是python的新手,目前正在尝试学习绳索,我试图创建一个链接列表类,以帮助更好地理解该语言及其结构。我知道该__repr__函数基本上应该返回与相同的东西,__str__但是我不确定实际的区别是什么。
到目前为止,这是我的课程:
class LinkedList:
class Node:
def __init__(self, val, prior=None, next=None):
self.val = val
self.prior = prior
self.next = next
def __init__(self):
self.head = LinkedList.Node(None)
self.head.prior = self.head.next = self.head
self.length = 0
def __str__(self):
"""Implements `str(self)`. Returns '[]' if the list is empty, else
returns `str(x)` for all values `x` in this list, separated by commas
and enclosed by square brackets. E.g., for a list containing values
1, 2 and 3, returns '[1, 2, 3]'.""" …Run Code Online (Sandbox Code Playgroud) 我正在为python / pandas做学校作业,想尝试一下f字符串,因为这似乎是非常方便的格式化方式。
阅读文档后,我意识到我无法使用\ n格式化输出。对于此代码:
f"Shape of dataset:\n {df.shape} (rows, columns)\n"
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
f"Shape of dataset:\n {df.shape} (rows, columns)\n"
Run Code Online (Sandbox Code Playgroud)
阅读文档后,这正是我所期望的。
但是,当我用包围时print(),如下所示:
print(f"Shape of dataset:\n {df.shape} (rows, columns)\n")
Run Code Online (Sandbox Code Playgroud)
我以我想要的方式找到它:
Out[38]: 'Shape of dataset:\n (270792, 11) (rows, columns)\n'
Run Code Online (Sandbox Code Playgroud)
我知道我也可以使用常规格式,但是我很好奇为什么这样做。是因为f字符串组件被忽略了print吗?
我通常会写一个 a__repr__作为展示如何重新创建实例的方式。例如:
class Component:
def __init__(self, start, end):
self.start = start
self.end = end
def __repr__(self):
return f'{self.__class__.__name__}(start={self.start}, end={self.end})'
Run Code Online (Sandbox Code Playgroud)
是否有一种“标准”的方式来编写__repr__,如果没有,是否有关于如何编写的建议选项/最佳实践,或者它完全是主观的?