我想从字符串中读取一些字符并将其放入其他字符串中(就像我们在C中所做的那样).
所以我的代码如下所示
import string
import re
str = "Hello World"
j = 0
srr = ""
for i in str:
srr[j] = i #'str' object does not support item assignment
j = j + 1
print (srr)
Run Code Online (Sandbox Code Playgroud)
在C中代码可能是
i = j = 0;
while(str[i] != '\0')
{
srr[j++] = str [i++];
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能在Python中实现相同的功能?
我能够在线找到一大堆信息(在Stack Overflow和其他方面),关于如何在Python中使用+或+=连接它是一种非常低效和糟糕的做法.
我似乎无法找到为什么+=这么低效.除了这里提到"它在某些情况下已经优化了20%的改进"(仍然不清楚这些情况是什么),我找不到任何其他信息.
在更技术层面上发生了什么,''.join()优于其他Python串联方法?
我在我的Windows机器上安装了IntelliJ IDEA和scala,但这些没有集成,我无法在IntelliJ中使用scala.如何配置和使用两者?
我正在开发一项新服务,我在C++应用程序中内置了一个REST API.C++应用程序侦听特定端口并接收HTTP/S流量,处理发送的内容,然后发回HTTP响应.
我的想法是,我将拥有不同的库,可以在C++ API中发布REST API.我可以从任何地方和任何地方获得请求,因此它可能是另一个软件,例如通过CURL或来自浏览器的POST请求.
API正在工作,直到我正在使用一个与Javascript一起使用的库来通过AJAX帖子发送C++ API请求.
因为我正在从一个网站到另一个域进行AJAX帖子,所以我不得不使用CORS.当我第一次开始设计时,我使用的是Chrome,我遇到了Chrome会发送HTTP OPTIONS请求的问题,我会回复403方法不允许,因为我当时并不知道.我查看了这个并找到了所需的内容,然后让它工作,以便Chrome发送OPTIONS请求,C++应用程序将发送200 OK,然后Chrome将发送实际的AJAX POST.
这完全适用于Chrome,但是,当在Internet Explorer中进行测试时,Firefox会在浏览器中发送OPTIONS,而C++应用程序会发回200 OK,但这两个浏览器都不会发送实际的POST请求.
以下是Chrome和Firefox的请求标头和响应标头.
Chrome请求标头
Request URL: http://192.168.1.96:500/initialise
Request Method: OPTIONS
Remote Address: 192.168.1.96:500
Referrer Policy: no-referrer-when-downgrade
Provisional headers are shown
Access-Control-Request-Headers: authorisation-token,device_id,session_id
Access-Control-Request-Method: POST
Origin: http://localhost
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Mobile Safari/537.36
Run Code Online (Sandbox Code Playgroud)
Chrome响应标头
Access-Control-Allow-Headers: *
Access-Control-Allow-Methods: POST, OPTIONS
Access-Control-Allow-Origin: *
Access-Control-Expose-Headers: session_id
Allow: POST,OPTIONS
Content-Length: 0
Content-Type: application/json
Status Code: 200 OK
Run Code Online (Sandbox Code Playgroud)
Firefox请求标头
Accept: text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8
Accept-Encoding gzip, deflate
Accept-Language: …Run Code Online (Sandbox Code Playgroud) 在阅读以下代码片段时,我已经使用Python已经有一段时间了:
>>> a = (1,2)
>>> a += (3,4)
>>> a
(1, 2, 3, 4)
Run Code Online (Sandbox Code Playgroud)
我问自己一个问题:为什么python元组是不可变的,我可以+=在它们上使用运算符(或者,更一般地说,为什么我可以修改元组)?我无法回答自己.
我得到了不变性的想法,虽然它们不像列表那样流行,但元组在python中很有用.但是不可改变并且能够修改长度似乎与我相矛盾......
我只是在python中经历可变和不可变的结构.在Python中写道"字符串是不可变的",即我们无法改变它们考虑代码:
str1='Rohit'
str1.replace('R','M')
Run Code Online (Sandbox Code Playgroud)
这给出了输出:
'Mohit'
Run Code Online (Sandbox Code Playgroud)
现在,有人说是变量str1指向字符串'Rohit',在str1.replace()之后它指向'Mohit'考虑以下代码:
'Rohit'.replace('R','M')
Run Code Online (Sandbox Code Playgroud)
这也给了我输出:
'Mohit'
Run Code Online (Sandbox Code Playgroud)
那么'字符串是不可变的'是什么意思?
如果python字符串是不可变的,如何更改如下:
a = "abc"
print a
a = "cde"
print a
Run Code Online (Sandbox Code Playgroud)
输出:
abc
cde
Run Code Online (Sandbox Code Playgroud)
这实际上是在创建一个新变量并改为指向它吗?
直到现在我都相信Python字符串是不可变的但是当我尝试这个时我感到很困惑
>>> a
'hello world !'
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a+="d"
>>> id(a)
140521043795728
>>> a
'hello world !dd'
Run Code Online (Sandbox Code Playgroud)
如果我使用+=运算符,虽然字符串已更改,但它不会更改对象ID.在这种情况下发生了什么?
现在这有点不同?https://ideone.com/eg1SIN
谁能解释一下这里发生了什么?
当我尝试使用+ =运算符修改字符串,并使用id()方法来检查对象的标识时,字符串似乎是可变的.有人面对这种奇怪的python行为吗?
a = '123'
print id(a)
# 89806008
a += '1'
print id(a)
# 89245728
a += '1'
print id(a)
# 89245728
print a
# '12311'
Run Code Online (Sandbox Code Playgroud)
使用 a = a + '1'doesnt具有相同的效果,并更改字符串ID.
Word='hello world'
Word=Word.upper()
Run Code Online (Sandbox Code Playgroud)
现在在这段代码中,根据我的理解,python 字符串是不可变的,所以当我重新分配实际发生的事情时?有人可以解释python如何处理这种情况。
python ×8
string ×3
immutability ×2
mutability ×2
python-2.7 ×2
ajax ×1
api ×1
http ×1
jquery ×1
optimization ×1
python-3.x ×1
replace ×1
scala ×1
tuples ×1