Tôi có 3 tệp PY; 1 là tệp chính chạy chức năng từ 2 tệp PY khác. 2 tệp khác sẽ được lấy dữ liệu từ tệp Excel. Tôi sẽ cần người dùng nhập để xác định xem có nên thu thập tập dữ liệu nào từ Excel hay không. Khi bắt đầu tệp1 (chính) của tôi, tôi sẽ yêu cầu người dùng nhập 1 hoặc 2 và lưu trữ giá trị này vào "chế độ" biến được xác định trước. 'Mã cập nhật ở dưới cùng' Nhưng ở trên sẽ khiến tôi lỗi về chế độ không được xác định. Tôi đã tìm thấy một số câu trả lời trực tuyến, mà tôi đã đặt đầu vào chế độ vào tệp 2 và nhập tệp 2 vào tệp 1 và 3. Nó đang hoạt động, nhưng tôi không biết tại sao nó phải là một chức năng và những gì 'toàn cầu 'đang làm ở đây. Có một phương pháp chuyển biến tốt hơn cho tệp khác? Mã hoạt động: Tệp 1: import file 2
import file 3
if file2.mode == '1':
function2 from file2
function3 from file3
elif file2.mode == '2':
function2 from file2
function3 from file3
Tệp 2:
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
Tệp 3: if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
Chỉnh sửa cập nhật một số mã sẽ khiến tôi lỗi Tệp 1: from file2 import *
mode = input(print("=>Input '1' for option1\n=>Input '2' for option2"))
if mode == '1':
get_excel_data()
print(shape)
elif mode == '2':
get_excel_data()
print(shape)
Tệp 2 from file1 import *
###I will get error here for mode not define
if mode == '1':
data_xls = pd.read_excel('data.xlsx', sheet_name=2d)
data_xls.to_csv('data.csv', encoding='utf-8')
df = pd.read_csv(data.csv', header = 1, encoding = encoding)
elif mode == '2':
data_xls = pd.read_excel('data.xlsx', sheet_name=3d)
data_xls.to_csv('data2.csv', encoding='utf-8')
df = pd.read_csv(data2.csv', header = 1, encoding = encoding)
shape = []
def get_excel_data():
if mode == '1':
for value in df["Shape"]:
if type(value) == float:
if math.isnan(value):
print("empty")
continue
else:
str(value).strip()
excel_list.append(value)
else:
pass
Có lẽ tôi sẽ cần sử dụng File1.Mode trong Tệp 2?
13 năm trước
Nhiệt độ đầu vào trong Celcius trong hàm chính trong tệp 1st.py được truyền dưới dạng biến C. I am trying to do a simple task in Python but I keep getting error. I have a string stored in a variable and a simple GUI with a button (in 1st.py) which will call another function in a separate file (twond.py) which will split that string and store
and return that in 1st.py Vì vậy, bạn gọi, trong chức năng chính của bạn Chức năng thứ hai trong Tệp Twond.py sẽ chuyển đổi nó thành Fahrenheit và lưu trữ trong biến F. Đây là nơi bạn phải tập trung ;-) Chức năng chính không quan tâm đến nơi hàm thứ hai (giả sử celciustofarenheit) lưu trữ các giá trị trung gian của nó. Nó chỉ quan tâm đến những gì được trả lại Bây giờ điều này nên được chuyển trở lại chức năng chính trong tệp 1st.py. Vì vậy, khi tôi ra lệnh in (f) trong tệp chính, nó sẽ in đầu ra bằng Fahrenheit. Vì vậy, bây giờ tôi có thể sử dụng fahrenheit này và chơi với biến này. #this is the main file 1st.py which has a string stored in variable s and a GUI function that calls the function
#
from Tkinter import *
import string, twond
class App:
def __init__(self,master):
frame = Frame(master.title("New Title"))
frame.pack()
self.bt=Button(frame, text='click', command=self.first)
self.bt.grid(row=1, column=0)
#global L
def first(self):
s = 'this is a string'
twond.second(str(s)) #this passes the variable s to the function second() in the file twond.py
#print(L)
#if I uncomment this i get error message
root = Tk()
app = App(root)
root.mainloop()
#this is the file twond.py which splits the string s and stores in variable L
#I am trying to make it to pass this variable L back to the main file 1st.py
import string
def second(s):
global L
L=string.split(s)
print(s)
print(L)
Hãy hoàn thành chức năng chính Yea tôi nhận được những gì bạn đã làm ở đây.Đây là những gì cuối cùng tôi muốn làm: def second(s):
str = string.split(s)
return str
Đây là chức năng chính và chức năng thứ hai: Bây giờ nó có thể nhận được biến được trả về như trong một mảng nhưng điều đó ổn vì sau đó tôi có thể tái tạo biến. Vì vậy, ví dụ trong 2 hộp nhập tôi đặt 30 C và phần trăm 5 đầu ra:
ở đâu Đây là những gì tôi muốn bây giờ. import string
global L
def second(s):
global L
L=string.split(s)
print(s)
print(L)
Cảm ơn rất nhiều chàng trai. Bạn là một huyền thoại. twond.L
ở đâu Nhiệt độ đầu vào trong Celcius trong hàm chính trong tệp 1st.py được truyền dưới dạng biến C.
Vì vậy, bạn gọi, trong chức năng chính của bạn def Main():
C=int(input("°C ?"))
F=twond.CelciusToFarenheit(C) # Here, the returned value is stored in F
# But this F has nothing to do with …
ở đâu Đây là những gì tôi muốn bây giờ.
13 năm trước
Đây là những gì cuối cùng tôi muốn làm: def second(s):
str = string.split(s)
return str
Đây là chức năng chính và chức năng thứ hai: Bây giờ nó có thể nhận được biến được trả về như trong một mảng nhưng điều đó ổn vì sau đó tôi có thể tái tạo biến. Vì vậy, ví dụ trong 2 hộp nhập tôi đặt 30 C và phần trăm 5 đầu ra: ở đâu
13 năm trước
Đây là những gì cuối cùng tôi muốn làm: def second(s):
str = string.split(s)
return str
Đây là chức năng chính và chức năng thứ hai: Bây giờ nó có thể nhận được biến được trả về như trong một mảng nhưng điều đó ổn vì sau đó tôi có thể tái tạo biến. Vì vậy, ví dụ trong 2 hộp nhập tôi đặt 30 C và phần trăm 5 đầu ra:
ở đâu My aim is not just to print it in the main file. I am trying to access this variable from the main file
1st.py
13 năm trước
Đây là những gì tôi muốn bây giờ. import string
global L
def second(s):
global L
L=string.split(s)
print(s)
print(L)
Cảm ơn rất nhiều chàng trai. Bạn là một huyền thoại. twond.L
13 năm trước
Đây là những gì tôi muốn bây giờ.
import string
global L
def second(s):
global L
L=string.split(s)
print(s)
print(L)
Cảm ơn rất nhiều chàng trai. Bạn là một huyền thoại. twond.L Trân trọng,
JICE53 Đăng Whiz trong đào tạo 53 Posting Whiz in Training
13 năm trước
Đây là những gì cuối cùng tôi muốn làm: def second(s):
str = string.split(s)
return str
Đây là chức năng chính và chức năng thứ hai: Bây giờ nó có thể nhận được biến được trả về như trong một mảng nhưng điều đó ổn vì sau đó tôi có thể tái tạo biến. Vì vậy, ví dụ trong 2 hộp nhập tôi đặt 30 C và phần trăm 5 đầu ra:
ở đâu print str(twond.second(string)) and it will work, no ?
13 năm trước
ở đâu print str(twond.second(string)) and it will work, no ?
Đây là những gì tôi muốn bây giờ. Nếu có một cách để chuyển các biến từ hàm được gọi là hàm gọi chính, điều đó sẽ giải quyết vấn đề. Ví dụ: Function1 (Biến Pass A đến)-> Function2 (Biến vượt qua B đến)-> Chức năng1 Function1 (pass variable
a to)--> Function2 (pass variable b to)-->Function1 trong đó hàm1 là hàm gọi chính trong tệp có tên firstfile.py function2 là hàm được gọi trong tệp có tên SecondFile.py Function2 is the called function in file named secondfile.py Được chỉnh sửa 13 năm trước bởi Romes87 vì: N/A
JICE53 Đăng Whiz trong đào tạo 53 Posting Whiz in Training
13 năm trước
OK, tôi đặt toàn bộ mã xuống: Đây là những gì tôi đã nói: Tôi đã viết 2 Files1st.py và Twond.py Here is what I was saying : I have written 2 files 1st.py and twond.py
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
4
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
5Khi tôi nhấn nút, bảng điều khiển của tôi đang hiển thị:
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
6Vì vậy, tôi không hiểu điều gì đang xảy ra với điều này. Tôi chắc chắn không có bất kỳ thuộc tính nào. Được chỉnh sửa 13 năm trước bởi Jice vì: N/A
13 năm trước
OK, tôi đặt toàn bộ mã xuống: Đây là những gì tôi đã nói: Tôi đã viết 2 Files1st.py và Twond.py Here is what I was saying : I have written 2 files 1st.py and twond.py
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
4
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
5Khi tôi nhấn nút, bảng điều khiển của tôi đang hiển thị:
def function():
global mode
mode = input(print("=>Input '1' for Eyebrow2D\n=>Input '2' for Eyebrow3D"))
function()
workfunction2():
6Vì vậy, tôi không hiểu điều gì đang xảy ra với điều này. Tôi chắc chắn không có bất kỳ thuộc tính nào.
Được chỉnh sửa 13 năm trước bởi Jice vì: N/A in if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
0Yea điều này dường như đang hoạt động. Ý tôi là: trong I am trying to avoid this and pass variable for the def second(s) to main function without any problem so when I have lots of variable in def second(...) I can easily pass them in the main function. Nếu bạn chỉ định s.split () là một biến mới. Hàm chính sẽ gây ra lỗi nếu nó cố gắng nhận biến mới này. Tôi đang cố gắng tránh điều này và chuyển biến cho (các) chức năng chính của DEF mà không có vấn đề gì vì vậy khi tôi có nhiều biến trong DEF Second (...), tôi có thể dễ dàng vượt qua chúng trong chức năng chính. Cảm ơn sự giúp đỡ của bạn, tôi sẽ kiểm tra lại và cho bạn biết nếu những gì bạn đề xuất làm việc cho tôi.
JICE53 Đăng Whiz trong đào tạo 53 Posting Whiz in Training
13 năm trước
OK, tôi đặt toàn bộ mã xuống: Đây là những gì tôi đã nói: Tôi đã viết 2 Files1st.py và Twond.py Khi tôi nhấn nút, bảng điều khiển của tôi đang hiển thị: if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
1Vì vậy, tôi không hiểu điều gì đang xảy ra với điều này. Tôi chắc chắn không có bất kỳ thuộc tính nào. if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
2 Được chỉnh sửa 13 năm trước bởi Jice vì: N/A Yea điều này dường như đang hoạt động. Ý tôi là: trong I won't develop this more here but you can google "callback" and you'll have informations about that.
13 năm trước
OK, tôi đặt toàn bộ mã xuống: Đây là những gì tôi đã nói: Tôi đã viết 2 Files1st.py và Twond.py Another thing you can look at in gui design is "callback" : you pass a function as a parameter to another function so that you can call the first function from the second one... Very useful to avoid nested imports.
Khi tôi nhấn nút, bảng điều khiển của tôi đang hiển thị: Let me make it clear with numbers rather than strings. Vì vậy, tôi không hiểu điều gì đang xảy ra với điều này. Tôi chắc chắn không có bất kỳ thuộc tính nào. Được chỉnh sửa 13 năm trước bởi Jice vì: N/A Second function in file twond.py will convert that to Fahrenheit and store in variable F. Now this should be passed back of to main function in
1st.py file. So when i command print(F) in the main file, it prints the output in Fahrenheit. So now I can use this Fahrenheit and play with this variable. Yea điều này dường như đang hoạt động. Ý tôi là: trong Input: C = 25 (in the entry box) get F from the second function in twond.py where the equation to convert
C to F is. print (F) : 77 variable A = F+5% print(A): 80.85 Nếu bạn chỉ định s.split () là một biến mới. Hàm chính sẽ gây ra lỗi nếu nó cố gắng nhận biến mới này. Tôi đang cố gắng tránh điều này và chuyển biến cho (các) chức năng chính của DEF mà không có vấn đề gì vì vậy khi tôi có nhiều biến trong DEF Second (...), tôi có thể dễ dàng vượt qua chúng trong chức năng chính. Cảm ơn sự giúp đỡ của bạn, tôi sẽ kiểm tra lại và cho bạn biết nếu những gì bạn đề xuất làm việc cho tôi.
JICE53 Đăng Whiz trong đào tạo 53 Posting Whiz in Training
13 năm trước
OK, tôi đặt toàn bộ mã xuống: Đây là những gì tôi đã nói: Tôi đã viết 2 Files1st.py và Twond.py
Khi tôi nhấn nút, bảng điều khiển của tôi đang hiển thị: if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
3Vì vậy, tôi không hiểu điều gì đang xảy ra với điều này. Tôi chắc chắn không có bất kỳ thuộc tính nào.
Được chỉnh sửa 13 năm trước bởi Jice vì: N/A The Main function doesn't care about where the second function (let's say CelciusToFarenheit) stores its intermediates values. It only cares about what is returned if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
4Yea điều này dường như đang hoạt động. Ý tôi là: trong So when i command print(F) in the main file, it prints
the output in Fahrenheit. So now I can use this Fahrenheit and play with this variable.
Hãy hoàn thành chức năng chính if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
5
13 năm trước
Vì vậy, bạn gọi, trong chức năng chính của bạn if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
3
Yea tôi nhận được những gì bạn đã làm ở đây.
Đây là nơi bạn phải tập trung ;-) Chức năng chính không quan tâm đến nơi hàm thứ hai (giả sử celciustofarenheit) lưu trữ các giá trị trung gian của nó.Nó chỉ quan tâm đến những gì được trả lại The Main function doesn't care about where the second function (let's say CelciusToFarenheit) stores its intermediates values. It only cares about what is returned if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
4Hãy hoàn thành chức năng chính if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
5
Đây là những gì cuối cùng tôi muốn làm: if file2.mode == '1':
do something
elif file2.mode == '2':
do other thing
workfunction3():
9Đây là chức năng chính và chức năng thứ hai: And the second function: from file2 import *
mode = input(print("=>Input '1' for option1\n=>Input '2' for option2"))
if mode == '1':
get_excel_data()
print(shape)
elif mode == '2':
get_excel_data()
print(shape)
0Bây giờ nó có thể nhận được biến được trả về như trong một mảng nhưng điều đó ổn vì sau đó tôi có thể tái tạo biến.Vì vậy, ví dụ trong 2 hộp nhập tôi đặt 30 C và phần trăm 5 đầu ra: So fro example in the 2 entry boxes I put 30 C and percentage 5 the output: from file2 import *
mode = input(print("=>Input '1' for option1\n=>Input '2' for option2"))
if mode == '1':
get_excel_data()
print(shape)
elif mode == '2':
get_excel_data()
print(shape)
1ở đâu from file2 import *
mode = input(print("=>Input '1' for option1\n=>Input '2' for option2"))
if mode == '1':
get_excel_data()
print(shape)
elif mode == '2':
get_excel_data()
print(shape)
2Đây là những gì tôi muốn bây giờ. Cảm ơn rất nhiều chàng trai.Bạn là một huyền thoại. Trân trọng, Trả lời chủ đề này Là một phần của cộng đồng Daniweb Chúng tôi là một cộng đồng thân thiện, tập trung vào ngành của các nhà phát triển, các chuyên gia CNTT, nhà tiếp thị kỹ thuật số và những người đam mê công nghệ gặp gỡ, học tập và chia sẻ kiến thức. |