标签: scope

在函数内创建一个类并访问在包含函数范围内定义的函数

编辑:

请参阅本问题底部的完整答案.

tl;博士回答:Python有静态嵌套的范围.的静态 方面可以与隐变量声明相互作用,产生非显而易见的结果.

(这可能特别令人惊讶,因为语言通常具有动态性质).

我认为我对Python的范围规则有一个很好的处理,但是这个问题让我彻底陷入困境,而且我的google-fu让我失望了(不是我很惊讶 - 看看问题标题;)

我将从一些可以按预期工作的示例开始,但是可以自由地跳到示例4的多汁部分.

例1.

>>> x = 3
>>> class MyClass(object):
...     x = x
... 
>>> MyClass.x
3
Run Code Online (Sandbox Code Playgroud)

足够简单:在类定义期间,我们能够访问外部(在本例中为全局)范围中定义的变量.

例2.

>>> def mymethod(self):
...     return self.x
... 
>>> x = 3
>>> class MyClass(object):
...     x = x
...     mymethod = mymethod
...
>>> MyClass().mymethod()
3
Run Code Online (Sandbox Code Playgroud)

再次(忽略了为什么人们可能想要这样做),这里没有任何意外:我们可以访问外部范围中的函数.

注意:正如Frédéric在下面指出的那样,这个功能似乎不起作用.请参见示例5(及更高版本).

例3.

>>> def myfunc():
...     x = 3
...     class MyClass(object):
...         x = x
...     return MyClass
... …
Run Code Online (Sandbox Code Playgroud)

python scope namespaces

62
推荐指数
2
解决办法
5万
查看次数

为什么用花括号括起C代码块?

我正在看一些C代码,并注意到它充满了围绕代码块的这些花括号,没有任何控制结构.看一看:

//do some stuff . . .
fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
{
    //a block! why not?
    char *tmp_argv[3];
    tmp_argv[0] = argv[0]; tmp_argv[1] = str; tmp_argv[2] = prefix;
    t = clock();
    fprintf(stderr, "[bwa_index] Convert nucleotide PAC to color PAC... ");
    bwa_pac2cspac(3, tmp_argv);
    fprintf(stderr, "%.2f sec\n", (float)(clock() - t) / CLOCKS_PER_SEC);
}
Run Code Online (Sandbox Code Playgroud)

为什么要在代码中插入这样的块?它充满了它们.是否有某种性能优势?一些神秘的C事?为什么???

编辑:此代码来自BWA,这是一个生物信息学程序,使用Burrows-Wheeler变换将小序列与大型参考序列对齐,以防任何人想知道.此代码示例与应用程序的功能并不特别相关.

c scope curly-braces

61
推荐指数
6
解决办法
3万
查看次数

js:访问父类的范围

我在javascript中的普通类中有一个jquery类.是否可以从jquery类中的回调函数访问父类范围内的变量?

我的意思的一个简单示例如下所示

var simpleClass = function () {    
    this.status = "pending";
    this.target = jqueryObject;
    this.updateStatus = function() {
        this.target.fadeOut("fast",function () {
           this.status = "complete"; //this needs to update the parent class 
        });
    };
};
Run Code Online (Sandbox Code Playgroud)

现在在上面的示例中,回调函数尝试访问jquery对象的范围.有没有办法访问父类中的状态变量?

javascript jquery scope class parent

61
推荐指数
3
解决办法
7万
查看次数

类静态变量初始化顺序

我有一个A类,它有两个静态变量.我想用另一个不相关的静态变量初始化一个,就像这样:

#include <iostream>
class A
{
public:
    static int a;
    static int b;
};

int A::a = 200;
int a = 100;
int A::b = a;
int main(int argc, char* argv[])
{
    std::cout << A::b << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是200.所以,谁能告诉我为什么?

c++ scope language-lawyer

61
推荐指数
4
解决办法
2354
查看次数

派生对基类成员数据的模板类访问

这个问题是一个在问的赞助这个线程.

使用以下类定义:

template <class T>
class Foo {

public:
    Foo (const foo_arg_t foo_arg) : _foo_arg(foo_arg)
    {
        /* do something for foo */
    }
    T Foo_T;        // either a TypeA or a TypeB - TBD
    foo_arg_t _foo_arg;
};

template <class T>
class Bar : public Foo<T> {
public:
    Bar (const foo_arg_t bar_arg, const a_arg_t a_arg)
    : Foo<T>(bar_arg)   // base-class initializer
    {

        Foo<T>::Foo_T = T(a_arg);
    }

    Bar (const foo_arg_t bar_arg, const b_arg_t b_arg)
    : Foo<T>(bar_arg)
    {
        Foo<T>::Foo_T = T(b_arg);
    } …
Run Code Online (Sandbox Code Playgroud)

c++ inheritance templates scope name-lookup

60
推荐指数
2
解决办法
4万
查看次数

Python:将dict中的变量加载到命名空间中

我想在函数外部使用函数中定义的一堆局部变量.所以我传递x=locals()了返回值.

如何将该字典中定义的所有变量加载到函数外部的命名空间中,这样x['variable']我就可以简单地使用,而不是使用值来访问该值variable.

python variables scope locals

59
推荐指数
4
解决办法
3万
查看次数

全局范围与全局命名空间

我看到了这两个短语的用法:全局范围和全局命名空间.他们之间有什么区别?

c++ scope namespaces terminology

59
推荐指数
4
解决办法
4万
查看次数

JavaScript回调范围

我在回调函数中引用我的对象时遇到了一些普通的旧JavaScript(没有框架)的问题.

function foo(id) {
    this.dom = document.getElementById(id);
    this.bar = 5;
    var self = this;
    this.dom.addEventListener("click", self.onclick, false);
}

foo.prototype = {
    onclick : function() {
        this.bar = 7;
    }
};
Run Code Online (Sandbox Code Playgroud)

现在当我创建一个新对象时(在DOM加载后,使用span #test)

var x = new foo('test');
Run Code Online (Sandbox Code Playgroud)

onclick函数中的'this'指向span#test而不是foo对象.

如何在onclick函数中获取对foo对象的引用?

javascript events binding scope callback

58
推荐指数
3
解决办法
5万
查看次数

jquery文件内部或外部的函数准备就绪

到目前为止,我只是把我所有的jQuery优点放在$(document).ready()函数中,包括在某些用户交互中使用的简单函数.

但是,不需要加载DOM文档或仅在事后调用的函数也可以放在外面$(document).ready().例如,考虑一个非常简单的验证函数,例如:

function hexvalidate(color) {
// Validates 3-digit or 6-digit hex color codes 
 var reg = /^(#)?([0-9a-fA-F]{3})([0-9a-fA-F]{3})?$/;
 return reg.test(color);
}
Run Code Online (Sandbox Code Playgroud)

该函数仅在$(document).ready()函数内 调用.

什么是最佳实践(语法,速度); 在jquery文档就绪函数内部外部放置这样的函数?

javascript jquery scope function

58
推荐指数
3
解决办法
4万
查看次数

Chrome扩展程序代码与内容脚本与注入脚本

我试图让我的Chrome扩展程序在init()加载新页面时运行该功能,但我无法理解如何执行此操作.根据我的理解,我需要在background.html中执行以下操作:

  1. 使用chrome.tabs.onUpdated.addListener()来检查时,页面变更
  2. 使用chrome.tabs.executeScript运行的脚本.

这是我的代码:

//background.html
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    chrome.tabs.executeScript(null, {code:"init();"});
});

//script.js
function init() {
    alert("It works!");
}
Run Code Online (Sandbox Code Playgroud)

我也想知道init()函数是否可以访问其他JS文件中的其他函数?

javascript scope google-chrome-extension content-script

57
推荐指数
1
解决办法
5万
查看次数