简体   繁体   English

Python 重用 function 带参数

[英]Python reuse of function with parameters

hello i wanted to make my code when i needed to call back my function but because of my addr parameter i can't call it i will need help thanks你好,当我需要回调我的 function 时,我想编写我的代码,但由于我的 addr 参数,我无法调用它,我需要帮助谢谢

def send_magic_packet(addr):
    # create socket
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SOBROADCAST, 1)
        # parse address
        mac = addr.upper().replace("-", "").replace(":", "")
        if len(mac) != 12:
            raise Exception("invalid MAC address format: {}".format(addr))
        buf = b'f' * 12 + (mac * 20).encode()
        # encode to magic packet payload
        magicp = b''
        for i in range(0, len(buf), 2):
            magicp += struct.pack('B', int(buf_[i:i + 2], 16))

        # send magic packet
        print("sending magic packet for: {}".format(addr))
        s.sendto(magicp, ('<broadcast>', DEFAULT_PORT))

while True:
    send_magic_packet(addr)
    data = aio.receive('feed')
    if int(data.value) == 0:
        print("PC Off")
    if int(data.value) == 1:
        print("PC ON")
Traceback (most recent call last):
  File "D:/Documents/WOL.py", line 42, in <module>
    send_magic_packet(addr)
NameError: name 'addr' is not defined

Replace address while calling as a string or define it.调用时替换地址作为字符串或定义它。

while True:
    addr = '192.168.2.323'
    send_magic_packet(addr)

or simply like this,或者就这样,

while True:
    send_magic_packet('192.168.2.323')

You need to define addr outside of your function definition.您需要在 function 定义之外定义addr

So, eg所以,例如

def send_magic_packet(addr):
    # create socket
    with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s:
        s.setsockopt(socket.SOL_SOCKET, socket.SOBROADCAST, 1)
        # parse address
        mac = addr.upper().replace("-", "").replace(":", "")
        if len(mac) != 12:
            raise Exception("invalid MAC address format: {}".format(addr))
        buf = b'f' * 12 + (mac * 20).encode()
        # encode to magic packet payload
        magicp = b''
        for i in range(0, len(buf), 2):
            magicp += struct.pack('B', int(buf_[i:i + 2], 16))

        # send magic packet
        print("sending magic packet for: {}".format(addr))
        s.sendto(magicp, ('<broadcast>', DEFAULT_PORT))

# Define addr
# -----------
addr = "foo"

while True:
    send_magic_packet(addr)
    data = aio.receive('feed')
    if int(data.value) == 0:
        print("PC Off")
    if int(data.value) == 1:
        print("PC ON")

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM