小编BYS*_*YS2的帖子

Python的eval()做什么?

在我正在阅读Python的书中,它继续使用代码 eval(input('blah'))

我阅读了文档,我理解它,但我仍然没有看到它如何改变input()功能.

它有什么作用?谁能解释一下?

python eval

280
推荐指数
10
解决办法
42万
查看次数

在初始化列表中使用"this"指针是否安全?

我有两个具有父子关系的Parent类(类"has-a" Child类),并且Child该类有一个指向它的指针Parent.在构造子进程时初始化父指针会很好,如下所示:

class Child;
class Parent;

class Child
{
public:
 Child (Parent* parent_ptr_) : parent_ptr(parent_ptr_) {};

private:
 Parent* parent_ptr;
};

class Parent
{
public:
    Parent() : child(this) {};

private:
    Child child;
}
Run Code Online (Sandbox Code Playgroud)

现在,我认识的人建议不使用this在初始化列表,以及C++ FAQ说我会得到一个编译器警告(顺便说一句,在VS2010,我没有得到一个警告),但我真的很喜欢这更好,然后调用一些功能集在Parent的构造函数.我的问题是:

  • 在创建对象this时,父指针是否定义良好Child
  • 如果是这样,为什么如上所述使用它被认为是不好的做法?

谢谢,

波阿斯

编辑:谢谢Timbo,它确实是一个副本(呵呵,我甚至选择了相同的类名).所以让我们获得一些附加值:引用怎么样?是否可以/安全地执行以下操作?:

class Child
{
public:
 Child (Parent& parnet_ptr_) : parent_ptr(parent_ptr_) {};

private:
 Parent* parent_ptr;
};

class Parent
{
public:
    Parent() : child(*this) …
Run Code Online (Sandbox Code Playgroud)

c++ initialization this

48
推荐指数
3
解决办法
2万
查看次数

在PL/SQL中使用绑定变量和动态SELECT INTO子句

我有一个关于绑定变量可以在PL/SQL中的动态SQL语句中使用的问题.

例如,我知道这是有效的:

CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job VARCHAR2) 
RETURN NUMBER
IS
  v_query_str VARCHAR2(1000);
  v_num_of_employees NUMBER;
BEGIN
  v_query_str := 'SELECT COUNT(*) FROM emp_' 
                 || p_loc
                 || ' WHERE job = :bind_job';                           
  EXECUTE IMMEDIATE v_query_str
    INTO v_num_of_employees
    USING p_job;
  RETURN v_num_of_employees;
END;
/
Run Code Online (Sandbox Code Playgroud)

我想知道你是否可以在这样的select语句中使用绑定变量

CREATE OR REPLACE FUNCTION get_num_of_employees (p_loc VARCHAR2, p_job VARCHAR2) 
RETURN NUMBER
IS
  v_query_str VARCHAR2(1000);
  v_num_of_employees NUMBER;
BEGIN
  v_query_str := 'SELECT COUNT(*) INTO :into_bind FROM emp_' 
                 || p_loc
                 || ' WHERE job = :bind_job';                           
  EXECUTE IMMEDIATE …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql oracle11g execute-immediate

42
推荐指数
3
解决办法
23万
查看次数

在Oracle中减去日期 - 数字或间隔数据类型?

我对Oracle DATE和INTERVAL数据类型的一些内部工作方式有疑问.根据Oracle 11.2 SQL Reference,当您减去2个DATE数据类型时,结果将是NUMBER数据类型.

粗略测试,这似乎是真的:

CREATE TABLE test (start_date DATE);
INSERT INTO test (start_date) VALUES (date'2004-08-08');
SELECT (SYSDATE - start_date) from test;
Run Code Online (Sandbox Code Playgroud)

将返回NUMBER数据类型.

但现在如果你这样做:

SELECT (SYSDATE - start_date) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)

你得到一个INTERVAL数据类型.换句话说,Oracle可以将NUMBER从DATE减法转换为INTERVAL类型.

所以现在我想我可以尝试直接在括号中输入NUMBER数据类型(而不是做'SYSDATE - start_date',这会导致NUMBER反正):

SELECT (1242.12423) DAY(5) TO SECOND from test;
Run Code Online (Sandbox Code Playgroud)

但这会导致错误:

ORA-30083: syntax error was found in interval value expression
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:这里发生了什么?似乎减去日期应该导致NUMBER(如SELECT语句#1中所示),它不能自动转换为INTERVAL类型(如SELECT语句#3中所示).但是,如果使用DATE减法表达式而不是放入原始NUMBER(SELECT语句#2),Oracle似乎能够以某种方式做到这一点.

谢谢

sql oracle plsql date oracle11g

21
推荐指数
2
解决办法
12万
查看次数

CURSOR_SHARING,Bind Variable Peeking和Histograms之间的关系

我正在努力确保我对CURSOR_SHARING,绑定变量,绑定变量偷看和直方图之间的关系有一个很好的理解,因为大多数来源涵盖这些主题是不同的部分.

好的,这就是我到目前为止收集的内容,如果我有任何错误,请随意纠正我:

CURSOR_SHARING

1. = EXACT(默认)

  • 1.1.如果SQL语句使用文字:优化器将为每个文字组合生成一个新的执行计划 - 优化器不会用文本替换文字.为每个文字组合生成一个新的父光标.
  • 1.2.如果SQL语句使用绑定变量:第一次运行语句时,优化器将查看绑定变量的值并使用这些特定值生成执行计划 - 所有将来使用这些绑定变量的语句将使用相同的计划(甚至如果计划对于绑定变量的其他值不是最理想的).

    2. = FORCE

  • 2.1.优化器将用绑定替换所有文字 - 并且基本上将使用与场景1.2相同的算法

    3. =类似

  • 3.1.没有直方图:优化器用绑定替换所有文字 - >与1.2和2.1相同的最终效果
  • 3.2.使用histogram:optmizer用绑定替换所有文字,但是每次运行语句时都会查看绑定变量(而不是仅在第一次运行时),以查看是否存在针对该特定绑定值的更优化执行计划变量(基于直方图统计).因此,为优化程序遇到的绑定变量的每个不同值有效地创建新的子游标.

    问题:

    1. 根据我的理解,是不是使用CUSOR_SHARING = EXACT +用绑定变量(1.2)编写SQL语句导致与设置CURSOR_SHARING = FORCE(2.1)完全相同的结果?在这两种情况下,优化器只会在第一次运行时查看绑定变量以生成执行计划,然后重新使用该计划,无论后续运行时绑定变量的值是什么?如果是这样,为什么大多数消息来源建议使用绑定变量?这似乎可能会对性能产生重大影响.

    2. 初始绑定变量中使用的直方图是否为1.2和2.1?在第一次运行SQL语句并且优化器查看绑定变量时,是否使用直方图(如果有)确定是使用全表扫描还是索引扫描?"Oracle Database 11g,性能调优配方"似乎表明直方图仅在CURSOR_SHARING = SIMILAR时相关,但其他一些来源表明直方图也用于所有其他CURSOR_SHARING设置.

    3. 在1.1的情况下,优化器是否会使用直方图来确定最佳执行计划?基本上我只是想知道何时使用直方图.是仅当CURSOR_SHARING = SIMILAR或其他CURSOR_SHARING设置好吗?

    4. Adpative Cursor Sharing - 只有存在绑定变量时才会发生此功能(来自用户查询或系统生成(通过文字替换)).因此它只发生在1.2,2.1,3.1和3.2?但由于SIMILAR已被弃用,这是否意味着ACS仅出现在1.2和2.1中?

    希望我现在离基地不太远,但如果我犯了任何错误,请纠正我

    谢谢!

    编辑:BYS2于2011年12月20日下午12:11

  • oracle performance plsql oracle11g

    11
    推荐指数
    1
    解决办法
    9904
    查看次数

    std :: sort与自定义比较器

    在下面的代码,为什么所有三个IntComparator()IntComparator2IntComparator3工作为的第三个参数sort()的功能?它们不会具有不同的l值函数类型吗?基于https://en.cppreference.com/w/cpp/algorithm/sort,它说

    比较函数的签名应等效于以下内容:

    bool cmp(const Type1&a,const Type2&b);

    哪个更匹配IntComparator2

    还有哪一个更可取?第三种选择似乎更简单,更直观。

    
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    struct IntComparator
    {
      bool operator()(const int &a, const int &b) const
      {
        return a < b;
      }
    };
    
    bool IntComparator2 (const int &a, const int &b)
    {
        return a < b;
    }
    
    bool IntComparator3 (int a, int b)
    {
        return a < b;
    }
    
    int main()
    {
        int items[] = { 4, …
    Run Code Online (Sandbox Code Playgroud)

    c++ sorting

    11
    推荐指数
    1
    解决办法
    248
    查看次数

    DBMS_XPLAN.DISPLAY_CURSOR vs解释计划,如果不使用gather_plan_statistics提示

    只是要求对2.之间的区别进行澄清2.据我所知,EXPLAIN PLAN为您提供理论执行计划,而DBMS_XPLAN.DISPLAY_CURSOR为您提供了具有该语句执行统计信息的实际执行计划.

    EXPLAIN PLAN将此数据存储在PLAN_TABLE中,而DBMS_XPLAN使用V $ SQL_PLAN,V $ SQL_PLAN_STATISTICS和V $ SQL_PLAN_STATISTICS_ALL视图获取其信息.

    但是,要使DISPLAY_CURSOR收集该参数的实际运行时统计信息,需要设置/*+ gather_plan_statistics */提示.否则,只填充V $ SQL_PLAN,它只会为您提供执行计划,但不会为您提供实际的执行统计信息.只有/*+ gather_plan_statistics */在填充V $ SQL_PLAN_STATISTICS 的地方.

    所以我的问题是,如果我不使用gather_plan_statistics提示,EXPLAIN PLAN和DISPLAY_CURSOR会不会给我相同的执行计划(对于同一个语句)?

    sql oracle performance oracle11g sql-execution-plan

    8
    推荐指数
    1
    解决办法
    4675
    查看次数

    USER_TAB_COLUMNS中的LOW_VALUE和HIGH_VALUE

    我对视图USER_TAB_COLUMNS(或等效项)中的列LOW_VALUE和HIGH_VALUE有疑问.

    我只是想知道这些值是否总是正确的,如果你有一个500k行值为1的列,500k行值为5和1行值1000,LOW_VALUE应该是1(转换后)原始数字)和HIGH_VALUE应为1000(转换原始数字后).但是,在任何情况下Oracle都会"错过"此异常值,而对于HIGH_VALUE则为5吗?

    另外,这两个值的目的是什么?

    谢谢

    oracle indexing performance query-optimization oracle11g

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

    如何在 Visual Studio 2019 中更改状态栏颜色?

    Visual Studio 有这个令人分心的蓝色状态栏。有人知道把它改成更可口的东西吗?以前的 File -> Preferences 方法在这个版本的 VS 中似乎不再存在了。

    谢谢!

    在此处输入图片说明

    visual-studio visual-studio-2019

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

    C ++函子语法

    我对如何在C ++中调用函子的语法有疑问。在下面的代码中,为什么前两个示例有效,而第三次和第四次尝试却无效?

    Also I can call ob (100); and it will output 300, but why can't I call Class(100) and have it output 300? Is there any way to use the overloaded operator () without instantiating a new object?

    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <functional>
    
    using namespace std; 
    
    
    struct Class
    { 
        void operator() (int a) 
        { 
            cout << a * 3 << " "; 
        } 
    } ob; 
    
    
    int main() 
    { 
    
        int arr[5] = { 1, 5, …
    Run Code Online (Sandbox Code Playgroud)

    c++ function-pointers functor function-object

    3
    推荐指数
    1
    解决办法
    94
    查看次数