小编Kar*_*tel的帖子

如果我在其中保留一个指向值的指针,C 标准是否将函数的返回结构保留在堆栈上?

以这个有争议的代码为例。

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堆栈上,直到调用堆栈帧结束,因为我正在用指针窥视其中?

c language-lawyer

10
推荐指数
1
解决办法
203
查看次数

python:我的类作为dict键.怎么样?

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__

python dictionary key

9
推荐指数
2
解决办法
2万
查看次数

Javascript 中是否需要类?它们对创建对象有什么影响?

考虑这个示例代码:

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显式使用什么效果?

javascript inheritance class javascript-objects

9
推荐指数
1
解决办法
3788
查看次数

当列表包含多个重复项时,为什么复制简单对象列表会变慢?

这是我的环境:

$ 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)

python performance list

9
推荐指数
1
解决办法
269
查看次数

Linux - 奇怪的Python输出

当我输入错误或在控制台中输入错误时,会出现以下消息:

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)

python linux

8
推荐指数
1
解决办法
3121
查看次数

Python-请求-JSONDecodeError

我有这个代码:

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)

python json python-requests

8
推荐指数
1
解决办法
5万
查看次数

如何将时间复杂度从 O(n^2) 降低到 O(n)

我最近参加了一次面试,他们要求我使用时间复杂度来解决以下问题O(n)。(黑客排名)

问题:

给定一个整数数组,就会有l整数和r整数。需要找到哪些所有元素对的总和相等并且介于 和l之间r

例子:

int[] array = {2,3,4,5}; int l=5, int r=7;
Run Code Online (Sandbox Code Playgroud)

输出:4

输入属性:

  • 输入未排序。
  • 输入将包含重复的元素。
  • 输入数组是非负的。

下面的组合将返回相等且在范围值之间的总和lr如果该对小于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)

java algorithm time-complexity

8
推荐指数
1
解决办法
1959
查看次数

threading.timer 在 python 中如何工作

我想每秒运行一个函数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 秒创建一个新线程吗?

python multithreading

7
推荐指数
1
解决办法
1万
查看次数

在`x = xy()`之后,为什么`x`变成了`None`而不是被修改(可能导致“AttributeError:'NoneType'对象没有属性”)?

如果您的问题作为此问题的重复项而被关闭,那是因为您有一些通用形式的代码

x = X()
# later...
x = x.y()
# or:
x.y().z()
Run Code Online (Sandbox Code Playgroud)

其中X是某种类型,它提供了y旨在z变异修改)对象(X类型的实例)的方法。这可以适用于:

  • 可变的内置类型,例如listdictsetbytearray
  • 标准库(尤其是 Tkinter 小部件)或第三方库提供的类。

这种形式的代码很常见,但并不总是错误的。问题的明显迹象是:

  • x.y().z()一样,会引发异常AttributeError: 'NoneType' object has no attribute 'z'

  • 有了x = x.y(),x就变成None, 而不是被修改的对象。这可能会被后来的错误结果发现,或者被像上面这样的异常(x.z()稍后尝试时)发现。

Stack Overflow 上有大量关于这个问题的现有问题,所有这些问题实际上都是同一个问题。之前甚至有多次尝试在特定上下文中涵盖同一问题的规范。然而,理解问题并不需要上下文,因此这里尝试一般性地回答:

代码有什么问题吗?为什么这些方法会这样,我们如何解决这个问题?


另请注意,当尝试使用 alambda或列表理解)来产生副作用时,会出现类似的问题。

同样明显的问题可能是由因其他原因返回的方法引起的None …

python attributeerror command-query-separation nonetype

7
推荐指数
1
解决办法
577
查看次数

给定一个表示十进制实数的字符串,如何计算所需的(非零)小数位数?

我将如何执行以下操作:

>>> 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

6
推荐指数
1
解决办法
3014
查看次数