programing

괄호 안의 문자열은 왜 그 문자열만으로 튜플을 만들지 않습니까?

batch 2023. 6. 5. 23:44
반응형

괄호 안의 문자열은 왜 그 문자열만으로 튜플을 만들지 않습니까?

인수에서 Python 스레드화 및 문자열 전송에 문제가 있습니다.

def processLine(line) :
    print "hello";
    return;

.

dRecieved = connFile.readline();
processThread = threading.Thread(target=processLine, args=(dRecieved));
processThread.start();

여기서 dReceived는 연결에서 읽은 한 줄의 문자열입니다.현재 "안녕하세요"를 인쇄하는 작업이 하나뿐인 간단한 기능을 호출합니다.

하지만 다음과 같은 오류가 발생합니다.

Traceback (most recent call last):
File "C:\Python25\lib\threading.py", line 486, in __bootstrap_inner
self.run()
File "C:\Python25\lib\threading.py", line 446, in run
self.__target(*self.__args, **self.__kwargs)
TypeError: processLine() takes exactly 1 arguments (232 given)

232는 제가 전달하려고 하는 문자열의 길이이기 때문에 각 문자로 나누어 그렇게 주장을 전달하려고 하는 것 같습니다.그냥 정상적으로 기능을 호출하면 되는데, 꼭 별도의 스레드로 설정하고 싶습니다.

튜플을 만들려고 하는데 문자열을 괄호로 묶는 것뿐입니다 :)

','를 추가합니다.

dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=(dRecieved,))  # <- note extra ','
processThread.start()

또는 대괄호를 사용하여 목록을 작성합니다.

dRecieved = connFile.readline()
processThread = threading.Thread(target=processLine, args=[dRecieved])  # <- 1 element list
processThread.start()

스택 추적에서 다음을 확인할 수 있습니다.self.__target(*self.__args, **self.__kwargs)

*self.__args문자열을 문자 목록으로 변환하여 문자를 전달합니다.processLine기능.하나의 요소 목록을 전달하면 해당 요소가 첫 번째 인수(사용자의 경우 문자열)로 전달됩니다.

저는 이곳에서 더 많은 배경 지식을 제공하기를 희망합니다.

첫째, 메서드 스레드화의 생성자 서명:스레드:

class threading.Thread(group=None, target=None, name=None, args=(), kwargs={}, *, daemon=None)

args는 대상 호출에 대한 인수 튜플입니다.기본값은 ()입니다.

둘째, 파이썬에서 다음과 같은 정보를 제공합니다.tuple:

빈 튜플은 빈 괄호 쌍으로 구성되며, 한 항목있는 튜플쉼표로 값을 따르는 방식으로 구성됩니다(괄호 안에 단일 값을 포함하기에는 충분하지 않음).

반면에, 문자열은 다음과 같은 일련의 문자입니다.'abc'[1] == 'b'그래서 만약 문자열을 보낸다면,args괄호 안에서도 각 문자는 단일 매개 변수로 처리됩니다.

그러나 Python은 매우 통합적이며 추가 인수를 허용할 수 있는 JavaScript와 다릅니다.대신에, 그것은 던집니다.TypeError불평을 늘어놓다

from threading import Thread
from time import sleep
def run(name):
    for x in range(10):
        print("helo "+name)
        sleep(1)
def run1():
    for x in range(10):
        print("hi")
        sleep(1)
T=Thread(target=run,args=("Ayla",))
T1=Thread(target=run1)
T.start()
sleep(0.2)
T1.start()
T.join()
T1.join()
print("Bye")

언급URL : https://stackoverflow.com/questions/3221655/why-doesnt-a-string-in-parentheses-make-a-tuple-with-just-that-string

반응형