社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

在python中挣扎于函数的全局定义

tyvm • 5 年前 • 1601 次点击  

我试过用 self



def main(): 
    size = int(sys.argv[1])
    print(size)
    generate = gen(size)
    print(generate)

def gen(self, size):
    #generate...
    return size

if __name__ == "__main__":
        main()

我面临的错误是 NameError: global name 'gen' is not defined .

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/54903
 
1601 次点击  
文章 [ 4 ]  |  最新文章 5 年前
Benjamin
Reply   •   1 楼
Benjamin    6 年前
  • 替换这个 generate = gen(size) 通过 generate = self.gen(size)
  • 添加 self 作为第一个论点 main 方法
jotes
Reply   •   2 楼
jotes    6 年前

你必须利用自己。如果调用的方法是类的一部分,则使用前缀。 因此,当您调用gen()和gen()时,它不是全局函数,而是您应该键入的类中的函数

generate = self.gen(size)

请记住,python缩进是拥有块的方法。因此,如果缩进main,main将在类块中,并且在全局范围内不可用。

Devesh Kumar Singh
Reply   •   3 楼
Devesh Kumar Singh    6 年前

import random
import sys


def gen(size):
    # generate...
    return size

def main():
    #Not sure where you are passing pages?
    size = int(sys.argv[1])
    print(size)
    generate = gen(size)
    print(generate)
    print("FIFO", FIFO(size,pages), "page faults.")
    print("LRU", LRU(size,pages), "page faults")
    print ("OPT", OPT(size,pages), "page faults")

def FIFO(self, size, pages):
    return "hello"

def LRU(self, size, pages):
    return "hello"

def OPT(self, size, pages):
    return "hello"

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print "Usage: python paging.py [number of pages]"
    else:
        main()
Paul Becotte
Reply   •   4 楼
Paul Becotte    6 年前

直接回答问题-

class paging():
    def main(): 
        generate = gen(size)
    def gen(self, size):
        return size
  • 全局命名空间中唯一的东西是 paging
  • 类定义方法-这些方法的全局命名空间是 class.method . 因此,这里的函数名应该是 paging.gen
  • 实例方法(在那里定义的函数)总是采用 self 作为第一个参数,它是类实例的替补。
  • 您可以使用self调用对象上的其他实例方法。。。

    自我生成()

坚持住,很难在寒冷中跳跃