以这个有争议的代码为例。
struct X {
int arr[1];
float something_else;
};
struct X get_x(int first)
{
struct X ret = { .arr = { first } };
return ret;
}
int main(int argc, char **argv) {
int *p = get_x(argc+50).arr;
return *p;
}
Run Code Online (Sandbox Code Playgroud)
get_x返回一个struct X. 我只对它的成员感兴趣arr。如果我只想要arr……为什么要为整个结构创建一个局部变量?
但是..那个代码正确吗?
在显示的示例中,C 标准是否知道将 的返回值保留在get_x堆栈上,直到调用堆栈帧结束,因为我正在用指针窥视其中?
class A():
def __init__(self, data=''):
self.data = data
def __str__(self):
return str(self.data)
d = {}
elem = A()
d[elem] = 'abc'
elem2 = A()
print d[elem2] # KeyError
# actually elem2! was used not elem
Run Code Online (Sandbox Code Playgroud)
如何实现这一点而不会出错?
编辑:
FFFUUU,错误是:
我试图得到d[elem2](而不是elem)另一个A()BUT实例与相同的内容.(对我感到羞耻)
还是......我怎么能这样做?重新定义__hash__?
考虑这个示例代码:
class Test {
say() {
console.log("I'm a test.");
}
}
let TestFromClass = new Test();
let TestFromObject = {
say() {
console.log("I'm also a test.");
}
};
TestFromClass.say(); // Output: I'm a test.
TestFromObject.say(); // Output: I'm also a test.
Run Code Online (Sandbox Code Playgroud)
我知道可以创建对象,例如TestFromObject,而无需先使用关键字创建类class。有class必要吗?这两种对象有区别吗?如果是这样,它必须class显式使用什么效果?
这是我的环境:
$ python
Python 3.8.10 (default, Nov 14 2022, 12:59:47)
[GCC 9.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> quit()
$ lscpu | grep "Model name"
Model name: Intel(R) Core(TM) i5-4430 CPU @ 3.00GHz
$ sudo dmidecode --type memory | grep -E "^\\s+(Speed|Type):" -
Type: DDR3
Speed: 1600 MT/s
Type: DDR3
Speed: 1600 MT/s
Run Code Online (Sandbox Code Playgroud)
我在我的机器上始终得到如下计时结果:
$ python -m timeit -s "x = list(range(250)) * 4" "[*x]"
200000 loops, best of 5: 1.54 usec per loop …Run Code Online (Sandbox Code Playgroud) 当我输入错误或在控制台中输入错误时,会出现以下消息:
Traceback (most recent call last):
File "/usr/lib/python3.3/site.py", line 629, in <module>
main()
File "/usr/lib/python3.3/site.py", line 614, in main
known_paths = addusersitepackages(known_paths)
File "/usr/lib/python3.3/site.py", line 284, in addusersitepackages
user_site = getusersitepackages()
File "/usr/lib/python3.3/site.py", line 260, in getusersitepackages
user_base = getuserbase() # this will also set USER_BASE
File "/usr/lib/python3.3/site.py", line 250, in getuserbase
USER_BASE = get_config_var('userbase')
File "/usr/lib/python3.3/sysconfig.py", line 610, in get_config_var
return get_config_vars().get(name)
File "/usr/lib/python3.3/sysconfig.py", line 560, in get_config_vars
_init_posix(_CONFIG_VARS)
File "/usr/lib/python3.3/sysconfig.py", line 432, in _init_posix
from _sysconfigdata import build_time_vars …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
import requests
r = requests.get('https://www.instagram.com/p/CJDxE7Yp5Oj/?__a=1')
data = r.json()['graphql']['shortcode_media']
Run Code Online (Sandbox Code Playgroud)
为什么我会收到这样的错误?
C:\ProgramData\Anaconda3\envs\test\python.exe C:/Users/Solba/PycharmProjects/test/main.py
Traceback (most recent call last):
File "C:/Users/Solba/PycharmProjects/test/main.py", line 4, in <module>
data = r.json()
File "C:\ProgramData\Anaconda3\envs\test\lib\site-packages\requests\models.py", line 900, in json
return complexjson.loads(self.text, **kwargs)
File "C:\ProgramData\Anaconda3\envs\test\lib\json\__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "C:\ProgramData\Anaconda3\envs\test\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\ProgramData\Anaconda3\envs\test\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Process finished with …Run Code Online (Sandbox Code Playgroud) 我最近参加了一次面试,他们要求我使用时间复杂度来解决以下问题O(n)。(黑客排名)
问题:
给定一个整数数组,就会有l整数和r整数。需要找到哪些所有元素对的总和相等并且介于 和l之间r;
例子:
Run Code Online (Sandbox Code Playgroud)int[] array = {2,3,4,5}; int l=5, int r=7;输出:4
输入属性:
下面的组合将返回相等且在范围值之间的总和l,r如果该对小于l或大于r则应跳过。而且配对不能重复:
array[0] + array[1] = 5 -> counter++
array[0] + array[2] = 6 -> counter++
array[0] + array[3] = 7 -> counter++
array[1] + array[2] = 7 -> counter++
array[1] + array[3] = 8 -> greater than r, no counter increment
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法,效果很好,但时间复杂度为 O(n^2):
public …Run Code Online (Sandbox Code Playgroud) 我想每秒运行一个函数n。经过一番研究,我弄清楚了这段代码:
import threading
def print_hello():
threading.Timer(5.0, print_hello).start()
print("hello")
print_hello()
Run Code Online (Sandbox Code Playgroud)
print_hello()调用时会每 5 秒创建一个新线程吗?
如果您的问题作为此问题的重复项而被关闭,那是因为您有一些通用形式的代码
x = X()
# later...
x = x.y()
# or:
x.y().z()
Run Code Online (Sandbox Code Playgroud)
其中X是某种类型,它提供了y旨在z变异(修改)对象(X类型的实例)的方法。这可以适用于:
list、dict和setbytearray这种形式的代码很常见,但并不总是错误的。问题的明显迹象是:
与x.y().z()一样,会引发异常AttributeError: 'NoneType' object has no attribute 'z'。
有了x = x.y(),x就变成None, 而不是被修改的对象。这可能会被后来的错误结果发现,或者被像上面这样的异常(x.z()稍后尝试时)发现。
Stack Overflow 上有大量关于这个问题的现有问题,所有这些问题实际上都是同一个问题。之前甚至有多次尝试在特定上下文中涵盖同一问题的规范。然而,理解问题并不需要上下文,因此这里尝试一般性地回答:
代码有什么问题吗?为什么这些方法会这样,我们如何解决这个问题?
另请注意,当尝试使用 alambda(或列表理解)来产生副作用时,会出现类似的问题。
同样明显的问题可能是由因其他原因返回的方法引起的None …
我将如何执行以下操作:
>>> num_decimal_places('3.2220')
3 # exclude zero-padding
>>> num_decimal_places('3.1')
1
>>> num_decimal_places('4')
0
Run Code Online (Sandbox Code Playgroud)
我正在考虑这样做:
len((str(number) if '.' in str(number) else str(number) + '.').rstrip('0').split('.')[-1])
Run Code Online (Sandbox Code Playgroud)
还有另一种更简单的方法吗?
python ×7
algorithm ×1
c ×1
class ×1
dictionary ×1
inheritance ×1
java ×1
javascript ×1
json ×1
key ×1
linux ×1
list ×1
nonetype ×1
performance ×1