精华内容
下载资源
问答
  • python中模块和包的概念
    2021-04-13 19:19:13

    python中模块和包的概念

    1.模块

    一个.py文件就是一个模块。这个文件的名字是:模块名.py。由此可见在python中,文件名和模块名的差别只是有没有后缀。有后缀是文件名,没有后缀是模块名。

    每个文件(每个模块)都是一个独立的名称空间,也就是说可以在两个(多个)文件中出现同名的函数。

    import,from.....import...两种导入的区别:

    1.import

      按模块区分拥有独立的命名空间,要是想使用模块中的函数需要使用      模块名.函数名       的方式来使用。

      可以使用import.....as....为导入的模块起一个别名,在使用这个模块中的函数时,可以使用     别名.函数名。

    2.from.....import...

      将模块的内容导入到当前的命名空间中,直接使用名字就行。

      如果,被导入的模块和当前的文件中有同名的函数,那么后者将会覆盖前者。

      什么意思呢?

        这个时候就要看from.....import...  (from后面跟的是模块名,import后面跟的是具体的函数名,或是模块中具体的变量名等)出现的位置了,如果出现在当前模块函数之前,那么当前模块的函数会覆盖导入的函数,如果出现在当前函数定义之后,那么导入的函数会覆盖当前模块中的函数。

        from.....import......可以接受as为导入的函数或是变量起别名,同样可以导入多个函数、变量等。

        from......import * 不建议使用这个方式导入模块,可能覆盖之前同名的函数等(这种方式不会导入以_开头的变量或函数)。

    3.共同点

      python中不支持重新加载或卸载之前的导入的模块,因此如果修改被导入的模块,需重新启动python程序或者是使用重新加载语句来实现   import importlib; importlib.reload(modulename)  。

      当一个模块被导入时,他的全局变量名__name__ 为模块名,当这个模块当做脚本执行时,全局变量名__name__为 __main__。

      模块的查找顺序:内存中已经加载的模块->内置模块->sys.path路径中包含的模块。(所以我们自己开发模块时,注意不要和已有的模块名重复)

    2.包

    包的本质就是一个包含__init__.py文件的目录。是一种通过使用‘.模块名’来组织python模块名称空间的方式,也就是说在在导入包时遇到带 点 的,这就是关于包的导入语法。

    导入包,本质上是导入了包中的__init__.py文件。

    包的导入形式也有,import 和 from.....import......两种形式。

    3.提示

       import * 会导入除了以 _ 开头的所有变量,但是如果定义了 __all__,那么会导入 __all__ 中列出的东西。

       __all__是模块中的全局变量,列表

    更多相关内容
  • 方法一:函数添加 1 import sys 2 查看sys.path 3 添加sys.path.append(“c:\\”) 方法二:修改环境变量 w用户可以修改系统环境变量PYTHONPATH 方法三:增加.pth文件,推荐! 在site-packages添加一个路径文件,如...
  • 移动和包NFC

    2018-08-20 16:56:04
    移动和包NFC
  • 主要介绍了Python中模块(Module)和包(Package)的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • Oracle_plsql讲义:第22章 创建子程序和包.ppt
  • 路由器是一种广泛运用在IP网段之间的设备,市场上有许多现成的产品。在应用中,我 们经常将路由器跨接在广域网和局域网之间,大多数的路由器产品也就是基于这种需要来设计的。但是随着用户IP网络的扩展,我们需要一...
  • Python中的模块和包

    2020-12-20 23:36:48
    Python中的模块和包 文章目录Python中的模块和包一、类属性和类方法01. 类的结构1.1 术语 —— 实例1.2 类是一个特殊的对象02. 类属性和实例属性2.1 概念和使用2.2 属性的获取机制03. 类方法和静态方法3.1 类方法3.2...
  • 订单支付:即用户在网上购物时向商家支付订单货款的工具,具备从用户账户(和包账户或银行卡账户)扣款并划入商户和包账户的能力,适用于网上购物付款、应用下载付费、定期扣款等多种应用场景。
  • 模块和包:生与死 PyCon'2015 上的教程演示。 2015 年 4 月 9 日。蒙特利尔。 大卫·比兹利 (@dabeaz), ://www.dabeaz.com 本教程假设使用 Python 3.4 或更新版本。 第 8 节和第 9 节中的某些示例需要使用 Python...
  • vs开发环境中国移动和包支付接口封装
  • Python语言功能非常强大,除了类之外,还有模块和包的概念,这有点像perl,此处简单说说包和模块。 一、Python中的模块 模块——其实就是我们说的库(lib)的概念,不过它不仅只是可以包含一系列函数,也可以包含类,...
  • PL/SQL 包头和包

    2021-05-08 16:47:17
    包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令。实例如下:CREATE OR REPLACE PACKAGE emp_pkg IS...

    包用于逻辑组合相关的过程和函数,它由包规范和包体两部分组成,包规范用于定义公用的常量

    变量,过程和函数,在SQL*PLUS中建立包规范可以使用CREATE PACKAGE命令。

    实例如下:

    CREATE OR REPLACE PACKAGE emp_pkg IS

    PROCEDURE update_sal(name VARCHAR2,newsal NUMBER);

    FUNCTION annual_incom(name VARCHAR2) RETURN NUMBER;

    END;

    包头值包含了过程和函数的说明,而没有过程和函数的实现代码。包体用于实现包规范中的过程和函数,

    在SQL*PLUS中建立包体可以使用CREATE PACKAGE BODY命令。实例如下:

    CREATE OR REPLACE PACKAGE BODY EMP_PKG IS

    PROCEDURE update_sal(name VARCHAR2,newsal NUMBER)

    IS

    BEGIN

    UPDATE EMP set sal=newsal

    where lower(ename)=lower(name);

    end;

    FUNCTION annual_incom(name VARCHAR2) return number

    IS

    annual_salary NUMBER(7,2);

    begin

    select sal*12 + nvl(comm,0) INTO annual_salary

    from emp where lower(ename)=lower(name);

    RETURN annual_salary;

    end;

    end;

    当调用包的过程和函数时,在过程和函数名之前必须要带有包名作为前缀(包名.子程序名),

    而如果要访问其他方案的包,还必须要加方案名作为前缀(方案名.包名.子程序名).

    SQL> set serveroutput on

    SQL> exec emp_pkg.update_sal('scott',1500);

    PL/SQL procedure successfully completed.

    SQL> select emp_pkg.annual_incom('scott') from dual;

    EMP_PKG.ANNUAL_INCOM('SCOTT')

    -----------------------------

    18000

    oracle 学习(五)pl/sql语言存储过程&包

    首先搞清楚俩概念 存储过程(procedure)&程序包(package) 存储过程:数据库对象之一,可以理解为数据库的子程序,在客户端和服务器端可以直接调用它.触发器是与表直接关联的特殊存储 ...

    Oracle数据库之开发PL/SQL子程序和包

    Oracle数据库之开发PL/SQL子程序和包   PL/SQL块分为匿名块与命名块,命名块又包含子程序.包和触发器. 过程和函数统称为PL/SQL子程序,我们可以将商业逻辑.企业规则写成过程或函数保 ...

    PL/SQL重新编译包无反应案例2

    在这篇"PL/SQL重新编译包无反应"里面介绍了编译包无反应的情况,今天又遇到一起案例, 在测试环境中,一个包的STATUS为INVALID,重新编译时,一直处于编译状态,检查发现 ...

    PL/SQL重新编译包无反应

    前几天碰到一个有趣的事情:早上同事执行一个包很久没有反应,就中断了执行,发邮件让我帮忙查看具体情况,我用PL/SQL Developer登录后,找到这个包的过程中发现这个包的图标有红色叉叉,也就是说这 ...

    二十三、oracle pl/sql分类三 包

    包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成.1).我们可以使用create package命令来创建包,如:i.创建一个包sp_packageii.声明该包有一个过程update_sal ...

    pl/sql学习(4): 包package

    本文简单介绍包, 目前来看我用的不多, 除了之前 为了实现 一个procedure 的输出参数是结果集的时候用到过 package. 概念: 包是一组相关过程.函数.变量.常量和游标等PL/SQL程序 ...

    开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

    1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROC ...

    pl/sql基础知识—包

    n  包 包用于在逻辑上组合过程和函数,它由包规范和包体两部分组成. 为什么需要包:使用包可以更好的管理自己写的函数.过程 ①我们可以使用create package命令来创建包:     creat ...

    Oracle PL/SQL编程之包(packages)

    1.简介 包用于在逻辑上组合过程和函数,它由包规范和包体组成. 我们可以使用create package来创建包,代码如下: ok,包创建完成,通过包的代码发现包的功能就是申明包中包含的过程和方法,红 ...

    随机推荐

    Net重温之路一

    简述: 最简单的 Hello World 准备: 工具:VS2013 + SqlServer 2008 R2 我们将以.NET Framework 4.5 为基准 开始: 一:新建解决方案 > ...

    9,SFDC 管理员篇 - 安全设置

    1, 使用Profile控制权限 (整体层面)     Setup | Manage Users | Profiles 总结下,一个用户只能有一个Profile,但是可以有多个Permission S ...

    fineui框架

    http://fineui.com/demo/#/demo/layout/fit.aspx 虽然比较丑陋,但功能实用 此框架比较简单, 框架的作用你懂的,重点是要有帮助文档, 进阶型的容易上手的帮助文 ...

    AC题目简解-dp

    dp类:A - Bridging signals ZOJ 3627 POJ1631 HDU1950给出一个从1-n的数字排列,求最长上升子序列长度.直接说解法吧.新开一个数组d,d[i]表示的是能构成 ...

    HDU 1079 Calendar Game 博弈

    题目大意:从1900年1月1日 - 2001年11月4日间选择一天为起点,两个人依次进行两种操作中的任意一种,当某人操作后为2001年11月4日时,该人获胜.问先手是否获胜 操作1:向后移一天 操作2 ...

    Java并发编程笔记——技术点汇总

    目录 · 线程安全 · 线程安全的实现方法 · 互斥同步 · 非阻塞同步 · 无同步 · volatile关键字 · 线程间通信 · Object.wait()方法 · Object.notify() ...

    oracle入坑日记<一> 安装

    学习日记系列(前辈/大神勿喷) 一.下载 下载地址:http://www.oracle.com/technetwork/cn/database/enterprise-edition/downloads ...

    android 给LinearLayout中添加一定数量的控件,并让着一定数量的控件从右到左移动,每隔若干秒停顿一下,最后一个view链接第一个view,然后继续移动循环往复,形成一个死循环简单动画效果

    主类:IndexAnimationLinearLayout.java package com.yw.sortlistview; import java.util.ArrayList; import j ...

    「PKUWC2018」Minimax

    题面 题解 强势安利一波巨佬的$blog$ 线段树合并吼题啊 合并的时候要记一下$A$点权值小于$l$的概率和$A$点权值大于$r$的概率,对$B$点同样做 时空复杂度$\text O(nlogw)$ ...

    Out of memory due to hash maps used in map-side aggregation解决办法

    在运行一个group by的sql时,抛出以下错误信息: Task with the most failures(4): -----Task ID:  task_201411191723_723592 ...

    展开全文
  • 研究了盐水法和包灰法在腌制咸蛋过程中理化品质的变化。结果表明:盐水法腌制的咸蛋黄的DHA含量是包灰法腌制的2倍多,而硬脂酸含量只有包灰法的2/3,其他脂肪酸没有明显差异。两种腌制方法的蛋黄和蛋清蛋白质种类...
  • python 零基础学习篇
  • 对象图和包

    2014-11-11 21:58:56
    对象图和包图 对象和包ppt 对象图和包图的详细介绍
  • 主要给大家介绍了关于Android applicationId和包名的区别,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • 这篇文章主要介绍了python模块和包的应用BASE_PATH使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python中的模块(module)是管理python应用程序的工具...
  • 此版本的代码试图通过使用类和包来更好地封装功能来重写/清理代码。 从2014年9月开始,这个仓库的想法很快就会被完全移植到Python中。 项目状态 视频转归一化蠕虫:未完成,当前工作于 将蠕虫归一化为特征:已完成,...
  • MyEclipse9或10添加SVN教程和包及svn服务器软件 二个版本svn的包 doc教程 和制作svn服务器的软件 超值svn集合大礼包
  • 包由两部分组成:包规范(PACKAGE)和包体(PACKAGE BODY)。 包规范是包的说明部分,是对外的操作接口(类似java接口),对应用是可见的。 包体是包的代码和实现部分(类似java实现类),对应用来说是不可见的。

    1、包(Package)概述

    包(Package)是用来存储相关程序结构的对象,它存储于数据字典中。包由两部分组成:包规范(PACKAGE)和包体(PACKAGE BODY)。

    包规范是包的说明部分,是对外的操作接口(类似java接口),对应用是可见的。

    包体是包的代码和实现部分(类似java实现类),对应用来说是不可见的。

    1.1 包说明

    公有元素(PUBLIC)    在包头中说明,在包体中具体定义。在包外可见并可以访问,对整个应用的全过程有效。
    私有元素(PRIVATE)  在包体的说明部分说明。只能被包内部的其他部分访问。
    局部变量(LOCAL)     在过程或函数的说明部分说明。只能在定义变量的过程或函数中使用。

    1.2 系统包

    包名称描述
    DBMS_OUTPUT在SQL*Plus环境下输出信息
    DBMS_DDL编译过程函数和包
    DBMS_SESSION改变用户的会话,初始化包等
    DBMS_TRANSACTION控制数据库事务
    DBMS_MAIL连接Oracle*Mail
    DBMS_LOCK进行复杂的锁机制管理
    DBMS_ALERT识别数据库事件告警
    DBMS_PIPE通过管道在会话间传递信息
    DBMS_JOB管理Oracle的作业
    DBMS_LOB操纵大对象
    DBMS_SQL执行动态SQL语句

    2、基本语法

    2.1 创建包和包体

    1.创建包规范语法:
            CREATE [OR REPLACE] PACKAGE 包名 IS|AS
               --变量(VARIABLE)定义
               --常量(CONSTANT)定义
               --游标(CURSOR)定义
               --类型(TYPE)定义
               --函数定义
               FUNCTION 函数名 [(参数列表)] RETURN 返回类型;
               --存储过程定义
               PROCEDURE 存储过程名 [(参数列表)];
               异常(EXCEPTION)
            END [包名]; 
    
    2.创建包体语法:
            CREATE [OR REPLACE] PACKAGE BODY 包名 IS|AS
               --...
               --函数实现
               FUNCTION 函数名 [(参数列表)] RETURN 返回类型 IS|AS
               --函数实现内容
               --存储过程实现
               PROCEDURE 存储过程名 [(参数列表)] IS|AS
               --存储过程实现内容
           END [包名];

    2.2 其它语法

    --1 删除包规范
    DROP PACKAGE 包规范名
    
    --2 删除包体
    DROP PACKAGE BODY 包体名
    
    --3 重新编译包头
    ALTER PACKAGE 包名 COMPILE PACKAGE
    
    --4 重新编译包体
    ALTER PACKAGE 包名 COMPILE PACKAGE BODY

    2.3 注意要点

    1 包说明和包体必须有相同的名字
    2 包的开始没有BEGIN语句,与存储过程和函数不同。
    3 在包的说明部分定义函数和过程的名称和参数,具体实现在包体中定义。
    4 在包内声明常量、变量、类型定义、异常、及游标时不使用DECLARE。
    5 包内的过程和函数的定义不要CREATE OR REPLACE语句。
    6 包定义和包体两者分离。
    7 只有当包头编辑成功后才能编辑包体。
    8 函数名与过程名须和包头中的函数过程一样。

    3、包的应用

    以下所涉及的表,请查看Oracle进阶(三)常用函数的附表。

    3.1 包创建

    CREATE OR REPLACE PACKAGE EMP_PK   
            --包定义部分   
              IS  
    				--公有变量:员工人数
             V_EMP_COUNT NUMBER(5);
    				--公有过程:初始化数据
             PROCEDURE INIT(P_MAX NUMBER,P_MIN NUMBER);
    				--公有过程:显示员工列表 
             PROCEDURE LIST_EMP;
    				 --公有过程:新增员工
             PROCEDURE INSERT_EMP(P_EMPNO NUMBER,P_ENAME VARCHAR2,P_JOB VARCHAR2,P_SAL NUMBER);
    				 --公有过程:删除员工
             PROCEDURE DELETE_EMP(P_EMPNO NUMBER);
    				 --公有过程:修改员工工资
             PROCEDURE CHANGE_EMP_SAL(P_EMPNO NUMBER,P_SAL NUMBER);
            END EMP_PK;  
            
              /
       
            CREATE OR REPLACE PACKAGE BODY EMP_PK
            --包体部分   
              IS  
             --私有变量:输出信息
             V_MESSAGE VARCHAR2(50);
             --私有变量:可修改工资上限 
             V_MAX_SAL NUMBER(7);
             --私有变量:可修改工资下限  
             V_MIN_SAL NUMBER(7);
             --私有函数:判断员工是否存在
             FUNCTION EXIST_EMP(P_EMPNO NUMBER)  RETURN  BOOLEAN;
             --私有过程:显示信息
             PROCEDURE SHOW_MESSAGE;
             --INIT
             PROCEDURE INIT(P_MAX NUMBER,P_MIN NUMBER)   
              IS   
             BEGIN  
              SELECT COUNT(*) INTO V_EMP_COUNT FROM EMP;  
              V_MAX_SAL:=P_MAX;  
              V_MIN_SAL:=P_MIN;  
              V_MESSAGE:='初始化数据已完成!';  
              SHOW_MESSAGE;   
             END INIT;  
             --LIST_EMP
             PROCEDURE LIST_EMP   
              IS   
             BEGIN  
              DBMS_OUTPUT.PUT_LINE('姓名       职务      工资');  
              FOR EMP_REC IN (SELECT ENAME,JOB,SAL FROM EMP)  
              LOOP  
               DBMS_OUTPUT.PUT_LINE(RPAD(EMP_REC.ENAME,10,' ')||RPAD(EMP_REC.JOB,10,' ')||TO_CHAR(EMP_REC.SAL));  
              END LOOP;  
              DBMS_OUTPUT.PUT_LINE('员工总人数'|| V_EMP_COUNT);  
             END LIST_EMP;  
            --INSERT_EMP 
             PROCEDURE INSERT_EMP(P_EMPNO NUMBER,P_ENAME VARCHAR2,P_JOB VARCHAR2,P_SAL NUMBER)  
              IS   
             BEGIN  
              IF NOT EXIST_EMP(P_EMPNO) THEN  
               INSERT INTO EMP(EMPNO,ENAME,JOB,SAL)VALUES(P_EMPNO,P_ENAME,P_JOB,P_SAL);  
               COMMIT;   
               V_EMP_COUNT:=V_EMP_COUNT+1;  
               V_MESSAGE:='员工'||P_EMPNO||'已新增!';  
              ELSE  
               V_MESSAGE:='员工'||P_EMPNO||'已存在,不能新增!';  
              END IF;  
               SHOW_MESSAGE;   
             EXCEPTION  
              WHEN OTHERS THEN  
              V_MESSAGE:='员工'||P_EMPNO||'新增失败!';  
              SHOW_MESSAGE;  
             END INSERT_EMP;  
            --DELETE_EMP
             PROCEDURE DELETE_EMP(P_EMPNO NUMBER)   
              IS   
             BEGIN   
              IF EXIST_EMP(P_EMPNO) THEN  
               DELETE FROM EMP WHERE EMPNO=P_EMPNO;  
               COMMIT;  
               V_EMP_COUNT:=V_EMP_COUNT-1;  
               V_MESSAGE:='员工'||P_EMPNO||'已删除!';  
              ELSE  
               V_MESSAGE:='员工'||P_EMPNO||'不存在,不能删除!';  
              END IF;  
              SHOW_MESSAGE;  
             EXCEPTION  
              WHEN OTHERS THEN  
              V_MESSAGE:='员工'||P_EMPNO||'删除失败!';  
              SHOW_MESSAGE;  
             END DELETE_EMP;  
             --CHANGE_EMP_SAL  
             PROCEDURE CHANGE_EMP_SAL(P_EMPNO NUMBER,P_SAL NUMBER)   
              IS   
             BEGIN   
              IF (P_SAL>V_MAX_SAL OR P_SAL<V_MIN_SAL) THEN  
               V_MESSAGE:='工资超出修改范围!';  
              ELSIF NOT EXIST_EMP(P_EMPNO) THEN  
               V_MESSAGE:='员工'||P_EMPNO||'不存在,不能修改工资!';  
              ELSE  
               UPDATE EMP SET SAL=P_SAL WHERE EMPNO=P_EMPNO;  
               COMMIT;  
               V_MESSAGE:='员工'||P_EMPNO||'工资已经修改!';  
              END IF;  
               SHOW_MESSAGE;  
             EXCEPTION  
              WHEN OTHERS THEN  
              V_MESSAGE:='员工'||P_EMPNO||'工资修改失败!';  
              SHOW_MESSAGE;  
             END CHANGE_EMP_SAL;  
            --SHOW_MESSAGE
             PROCEDURE SHOW_MESSAGE   
              IS   
             BEGIN  
              DBMS_OUTPUT.PUT_LINE('提示信息:'||V_MESSAGE);  
             END SHOW_MESSAGE;  
             --EXIST_EMP
             FUNCTION EXIST_EMP(P_EMPNO NUMBER)  
             RETURN BOOLEAN   
              IS
             --局部变量:员工数量
             V_NUM NUMBER;
             BEGIN  
              SELECT COUNT(*) INTO V_NUM FROM EMP WHERE EMPNO=P_EMPNO;  
              IF V_NUM=1 THEN   
                RETURN TRUE;  
              ELSE  
               RETURN FALSE;  
              END IF;   
             END EXIST_EMP;  
    
            END EMP_PK; 

    3.2 包调用

    --调用包
    
    --1 初始化
    BEGIN
      EMP_PK.INIT(P_MAX => 200,
                  P_MIN => 100);
    END;
    
    --2 员工列表
    CALL EMP_PK.LIST_EMP();
    
    --3 新增员工
    CALL EMP_PK.INSERT_EMP(2021,'一二山人','YESR',10000); 
     
    --4 查看员工人数
    BEGIN  
        DBMS_OUTPUT.PUT_LINE(EMP_PK.V_EMP_COUNT);  
    END;
    
    --5 删除员工
    CALL EMP_PK.DELETE_EMP(2021); 
    
    --6 修改工资
    CALL EMP_PK.CHANGE_EMP_SAL(7900,150); 
    
    --7 授权其他用户调用包
    GRANT EXECUTE ON EMP_PK TO SYS;  
    
    --8 其它用户SYS调用包
    CALL SCOTT.EMP_PK.INIT(400,300); 

    4、包的进阶

    4.1 包重载创建

    CREATE OR REPLACE PACKAGE EMP_OVERLOAD_PK IS
       --过程:新增部门
       PROCEDURE INSERT_DEPT (
           P_DEPTNO   DEPT.DEPTNO%TYPE,    --部门编号
           P_DNAME    DEPT.DNAME%TYPE,     --部门名称
           P_LOC      DEPT.LOC%TYPE        --位置
        );   
       --过程:新增部门(重载)
       PROCEDURE INSERT_DEPT (
           P_DEPTNO   DEPT.DEPTNO%TYPE,    --部门编号
           P_DNAME    DEPT.DNAME%TYPE     --部门名称
        );       
        --函数:获取员工加薪
        FUNCTION GET_ADDSALARY (P_EMPNO EMP.EMPNO%TYPE)
           RETURN NUMBER;
    
        --函数:获取员工加薪(重载)
        FUNCTION GET_ADDSALARY (P_ENAME EMP.ENAME%TYPE)
           RETURN NUMBER;                  
    END EMP_OVERLOAD_PK;
    
    /
    
    CREATE OR REPLACE PACKAGE BODY EMP_OVERLOAD_PK
    IS
        FUNCTION EXIST_DEPT(P_DEPTNO DEPT.DEPTNO%TYPE)  RETURN  NUMBER;
      --INSERT_DEPT
      PROCEDURE INSERT_DEPT (
           P_DEPTNO   DEPT.DEPTNO%TYPE,
           P_DNAME    DEPT.DNAME%TYPE,
           P_LOC      DEPT.LOC%TYPE
        )
        AS
           BEGIN
           IF EXIST_DEPT(P_DEPTNO) > 0  --如果部门存在
           THEN                            --抛出异常
              RAISE_APPLICATION_ERROR (-2021, '出现了相同的员工记录');
           END IF;
           INSERT INTO DEPT(DEPTNO, DNAME, LOC)
                VALUES (P_DEPTNO, P_DNAME, P_LOC);--新增
    						COMMIT;
        END INSERT_DEPT;
    --INSERT_DEPT(重载)
      PROCEDURE INSERT_DEPT (
           P_DEPTNO   DEPT.DEPTNO%TYPE,
           P_DNAME    DEPT.DNAME%TYPE
        )
        AS
           BEGIN
           IF EXIST_DEPT(P_DEPTNO) > 0 --如果部门存在
           THEN                            --抛出异常
              RAISE_APPLICATION_ERROR (-2022, '出现了相同的员工记录');
           END IF;
           INSERT INTO DEPT(DEPTNO, DNAME, LOC)
                VALUES (P_DEPTNO, P_DNAME, '广州天河区');--新增记录
    						COMMIT;
        END INSERT_DEPT;
    
        --GET_ADDSALARY
        FUNCTION GET_ADDSALARY (P_EMPNO EMP.EMPNO%TYPE)
           RETURN NUMBER
        IS
           V_JOB           EMP.JOB%TYPE;
           V_SAL           EMP.SAL%TYPE;
           V_SALARYRATIO   NUMBER (10, 2);--调薪比率
        BEGIN
           --获取员工表中的薪资信息
           SELECT JOB, SAL INTO V_JOB, V_SAL FROM EMP WHERE EMPNO = P_EMPNO;
           CASE V_JOB
              WHEN 'CLERK' THEN
                 V_SALARYRATIO := 1.05;
              WHEN 'SALESMAN' THEN
                 V_SALARYRATIO := 1.1;
              WHEN 'MANAGER' THEN
                 V_SALARYRATIO := 1.2;
              ELSE
                 V_SALARYRATIO := 1;
           END CASE;
           IF V_SALARYRATIO <> 1
           THEN
              RETURN ROUND(V_SAL * V_SALARYRATIO,2);
           ELSE
              RETURN V_SAL;
           END IF;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 RETURN 0;
         END GET_ADDSALARY;
    
        --GET_ADDSALARY(重载)
        FUNCTION GET_ADDSALARY (P_ENAME EMP.ENAME%TYPE)
           RETURN NUMBER
        IS
           V_JOB           EMP.JOB%TYPE;
           V_SAL           EMP.SAL%TYPE;
           V_SALARYRATIO   NUMBER (10, 2);--调薪比率
        BEGIN
           --获取员工表中的薪资信息
           SELECT JOB, SAL INTO V_JOB, V_SAL FROM EMP WHERE ENAME = P_ENAME;
           CASE V_JOB
              WHEN 'CLERK' THEN
                 V_SALARYRATIO := 1.05;
              WHEN 'SALESMAN' THEN
                 V_SALARYRATIO := 1.1;
              WHEN 'MANAGER' THEN
                 V_SALARYRATIO := 1.2;
              ELSE
                 V_SALARYRATIO := 1;
           END CASE;
           IF V_SALARYRATIO <> 1
           THEN
              RETURN ROUND(V_SAL * V_SALARYRATIO,2);
           ELSE
              RETURN V_SAL;
           END IF;
         EXCEPTION
              WHEN NO_DATA_FOUND THEN
                 RETURN 0;
         END GET_ADDSALARY;
    
        --私有函数:部门是否存在
        FUNCTION EXIST_DEPT(P_DEPTNO DEPT.DEPTNO%TYPE) RETURN NUMBER
        AS
          V_COUNT NUMBER(2);
        BEGIN
           SELECT COUNT(*) INTO V_COUNT FROM DEPT WHERE DEPTNO=P_DEPTNO;
           RETURN V_COUNT;
        END;
    END EMP_OVERLOAD_PK;
    

    4.2 包重载调用

    --调用
    BEGIN
    	 EMP_OVERLOAD_PK.INSERT_DEPT(50,,);
    END
    --重载过程
    BEGIN
      EMP_OVERLOAD_PK.INSERT_DEPT(P_DEPTNO => 50,
                                  P_DNAME =>'交付二部',
                                  P_LOC => '海珠区');
    END;
    --过程
    BEGIN
      EMP_OVERLOAD_PK.INSERT_DEPT(P_DEPTNO => 60,
                                  P_DNAME =>'交付一部');
    END;
    ----重载函数
    DECLARE
       V_SAL NUMBER(10,2);
    BEGIN
       V_SAL:=EMP_OVERLOAD_PK.GET_ADDSALARY(7369);
    	 DBMS_OUTPUT.PUT_LINE('获取员工加薪'|| V_SAL); 
    END;
    --函数
    DECLARE
       V_SAL NUMBER(10,2);
    BEGIN
       V_SAL:=EMP_OVERLOAD_PK.GET_ADDSALARY('SMITH');
    	 DBMS_OUTPUT.PUT_LINE('获取员工加薪'|| V_SAL); 
    END;
    

     

    展开全文
  • 采用吸附交联和包埋法对假单胞菌(Pseudomonas)CUY8产壳聚糖酶进行固定,并对游离壳聚糖酶和2种固定化酶的特性进行比较。游离壳聚糖酶的最佳pH值为5.0,最佳温度为55℃;采用吸附交联方法所获得的壳聚糖酶的最佳pH...
  • 主要介绍了Python虚拟环境的创建和包下载,本文通过实例给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • Degraph是用于可视化和测试JVM应用程序中的类和包依赖关系的工具。 您可以它,或阅读。 如何建造 我对贡献非常感兴趣,因此,如果您有兴趣,请给我发消息,直到我回复为止,然后看看源代码。 Degraph使用gradle...
  • 插件和包

    2019-04-09 01:23:14
    NULL 博文链接:https://xiii.iteye.com/blog/1631004
  • python的模块和包的详细说明

    千次阅读 2020-06-09 21:37:42
    库是参考其他编程语言的说法,是指完成一定功能的代码集合,在python中的形式就是模块和包。 四、包的导入 导入包的本质:导入一个包就是执行包下的__init__.py文件 只要一个文件夹下面有个 init.py 文件,那么这个...

    一、模块

    相信使用过Python编写代码的同学,会经常在文件头看到这样的import …,是的,这就是导入模块的语句,而每一个后缀名为.py的文件都是一个模块。

    import jieba
    import os 
    

    1. 什么是模块?

      逻辑上来说模块是一组功能的组合;实质上一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

    import加载的模块分为四个通用类别:

    a. 使用python编写的代码(.py文件);
    b. 已被编译为共享库或DLL的C或C++扩展;
    c. 包好一组模块的包
    d. 使用C编写并链接到python解释器的内置模块;

    如何使用模块?
      想要使用模块,必须先要将模块加载进来,可以通过关键字 import from进行加载;需要注意的是模块和当前文件在不同的命名空间中。

    2. 模块的构成:

      模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句

    二、模块的导入

    1、导入整个模块

      比如我们有一个myModule的文件夹,里面有一个first.py文件,文件中的内容如下

    a = 1
    def myfun(s):
        print(s + 1)
    

      在myModule的文件夹下打开终端/cmd,输入python进入命令行交互模式
    写完模块导入的语句之后,接着就可以调用该模块下的函数了。调用方式为

    >>> import first
    >>> a
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'a' is not defined
    >>> first.a
    1
    >>> first.myfun(2)
    3
    

    在这里插入图片描述
    2、导入特定的函数/变量

      所以说first.py文件就是一个模块,可以用import导入,里面变量和方法都要用first.前缀来引用,如果想不使用这个前缀或是我们只是想要使用模块中的某个函数,就可以只导入该变量或函数。导入方式为:from module_name import function_name。
      如果导入的是变量,就可以直接输入变量名来获得变量的值;如果直接导入的是函数,可以直接使用function_name() 的方式调用函数,无需在函数名前面加上模块名。

    # 导入变量
    >>> from first import a
    >>> a
    1
    # 导入函数
    >>> from first import myfun
    >>> myfun(3)
    4
    # 一次导入多个变量
    >>> from first import a,myfun
    >>> a
    1
    >>> myfun(5)
    6
    # 导入模块中全部变量
    >>> from first import *
    >>> a
    1
    >>> myfun(5)
    6
    >>>
    

    3、使用as给模块指定别名

      可以在后面使用as给函数指定别名。句式如:import module_name as new_name,

    >>> import first as f
    >>> f.a
    1
    >>> f.myfun(6)
    7
    

    在上述导入函数的基础上,可以在后面用as语句给导入的函数指定别名。句式如:from module_name import function_name as new_function。

    >>> from first import myfun as add
    >>> add(8)
    9
    

    三、模块、包、库的区别

    模块(module) 其实就是py文件,里面定义了一些函数、类、变量等。
    包(package)多个模块的聚合体形成的文件夹,里面可以是多个py文件,也可以嵌套文件夹。
    是参考其他编程语言的说法,是指完成一定功能的代码集合,在python中的形式就是模块和包。

    四、包的导入

    导入包的本质:导入一个包就是执行包下的__init__.py文件

    只要一个文件夹下面有个 init.py 文件,那么这个文件夹就可以看做是一个包

    包导入的过程和模块的基本一致,只是导入包的时候会执行此包目录下的 init.py 而不是模块里面的语句了。另外,如果只是单纯的导入包,而包的 init.py 中又没有明确的其他初始化操作,那么此包下面的模块是不会自动导入的。

    下面我们来实操进行说明

    在myModule文件夹中新建folder文件夹,先cd进入myModule文件夹,在mkdir folder新建folder文件夹

    xws@MHQ0063 myModule % mkdir folder
    

    我们想让folder文件夹成为一个包。文件夹里新建abcd.py文件,输入vi abcd.py,文件中内容如下

    b = 2
    
    class Myclass:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
        def get_info(self):
            print('my name is {name} and age is {age}'.format(name = self.name, age = self.age))
    

    esc–>:wq退出保存
    在这里插入图片描述
    此时在folder文件夹中新建一个__init__.py文件,否则程序会将这个文件夹当成普通文件夹来处理而不是一个包。这个__init__.py文件中可以什么都不填。

    上面步骤操作下来,文件结构如下
    在这里插入图片描述
    我们还是在myModule文件夹下打开命令行,进入python交互模式

    >>> import folder
    >>> folder.abcd.b
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    AttributeError: 'module' object has no attribute 'abcd'
    # 只是导入包不能随便使用其中的模块,要导入到具体模块或者变量的层次
    
    >>> from folder import abcd
    >>> bob = abcd.Myclass(name = 'Bob', age = 20)
    >>> bob.name
    'Bob'
    >>> bob.get_info()
    my name is Bob and age is 20
    >>> from folder.abcd import b
    >>> b
    2
    >>> import folder.abcd
    >>> abcd.b
    2
    >>> import folder.abcd as a
    >>> a.b
    2
    

    注意:

    • 只是导入包不能随便使用其中的模块,要导入到具体模块或者变量的层次
    • 文件夹与文件之间可以用.也可以用from import格式,而文件与里面的变量之间只能用from import格式,即不能import folder.abcd.b

    特殊的__init__.py文件

    init.py文件其实是一个特殊的文件,它相当于名为folder模块,即如果使用import folder则可以调用在__init__.py文件文件中定义的变量。

    将__init__.py文件编写如下

    from folder.abcd import b
    c = 3
    

    在myModule文件夹下打开命令行,进入python交互模式

    >>> import folder
    >>> folder.c
    3
    >>> folder.b
    2
    >>> from folder import b
    >>> b
    2
    

    对比之前的from folder.abcd import b,使用__init__.py文件可以将常用的一些变量导入以方便调用。

    另外需要注意两点

    1. __ init__ .py文件编写时,如果要导入其他模块中的变量,即使__ init__.py文件和abcd.py文件在同一个文件夹下,也不能from abcd import b,要从abcd文件从哪里来开始写,即从包的名称开始,from folder.abcd import b。
    2. folder文件夹里的嵌套文件夹内不需要新建__init__.py文件即可像模块一样调用,但是一般还是要新建这个文件,可以方便地导入常用变量。

    用import hello时,python会搜寻hello.py文件,搜索顺序如下
    先搜寻内置模块是否有hello(因此我们定义的模块名不能内置模块相同)
    若内置模块没有,则看以下这些目录里有没有

    >>> import sys
    >>> sys.path
    ['', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload', '/Users/xws/Library/Python/2.7/lib/python/site-packages']
    

    其中第一个’‘表示当前的工作路径,我们可以看出安装的第三方包所在路径(‘/Users/xws/Library/Python/2.7/lib/python/site-packages’)也在这个列表之中,所以无论工作路径在哪里,都能搜寻到这些包。建议把模块放在该文件夹下。

    __ all __

    import *的方式无法导入以下划线开头的变量名_e = 4

    __ init__.py文件内容更改如下

    from folder.abcd import b
    c = 3
    _e = 4
    

    python模式下,以下导入方式,在查找变量_e是会报name ‘_e’ is not defined

    >>> from folder import *
    >>> c
    3
    >>> _e
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name '_e' is not defined
    

    但如果指定导入_e便可以

    >>> from folder import c
    >>> c
    3
    >>> from folder import _e
    >>> _e
    4
    

    如果定义了__all__,则import *就可以导入下划线开头的变量

    __ init__.py文件内容更改如下

    from folder.abcd import b
    __all__ = ['c', '_e']
    c = b + 1
    _e = 4
    

    在这里插入图片描述

    >>> from folder import *
    >>> b
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    NameError: name 'b' is not defined
    >>> c
    3
    >>> _e
    4
    

    由上面的输出结果,我们可以知道import *只会导入__all__中指定的变量,无论是否以下划线开头。这样限制可以防止import *命令导入太多变量污染命名空间,过滤掉一些中间变量如b

    五、模块导入的绝对引用与相对引用

    python中的import分为绝对引用和相对引用两种。它们之间的差异在于,引用模块时,定位被引用模块位置 的方式不同。

    绝对引用是通过.的连接,指定出最高级文件(夹),到目标文件的绝对路径。我们上面的所有用法都属于绝对引用。

    而相对引用是指定待引用模块与当前文件的相对位置,.表示上一级文件

    • 绝对引用:from folder.abcd import myclass
    • 相对引用:from .abcd import myclass

    在实际使用中,无论是绝对导入还是相对导入都要注意,如何导入与被调用位置有关。

    以下面的文件结构为例
    folder1
      │ first1.py
      │ first2.py
      │ init.py
      │
      └─folder2
        second1.py
        second2.py
        init.py

    下面分为两种情况

    1. folder1是一个项目。运行这个项目需要在folder文件夹中打开cmd,运行python first1.py

      此时first1.py文件中引用first2.py中变量只需from first2 import sth
      不可以from folder1.first2 import sth,也不可以 from .first2 import sth
      (即使folder1中有定义_init_.py,在文件夹内部打开cmd仍无法搜索到folder1的名称)

      first1.py文件中引用second1.py中变量需要from folder2.second1 import sth
      second1.py文件中引用second2.py中变量需要from folder2.second2 import sth
      或者使用相对引用方法:from .second2 import sth
      (注意first1引用first2 与 second1引用second2 的区别)

    2. folder1是一个包。一般使用时,是在外面的文件夹中import这个包

      此时first1.py文件中引用first2.py中变量需要from folder1.first2 import sth
      或者from .first2 import sth
      不可以 from first2 import sth,即使两个first文件在同一个文件夹内

      从上面两个例子的对比中我们可以看出,一个项目内的文件之间,相互引用变量时,如何import是要看这个项目是在什么文件中调用的,也可以说要看这些文件和调用处之间的相对位置。

    import运行本质

    使用import语句,要明确两件事

    (1)执行导入模块命令时,会首先检查待导入的模块是否在当前已有模块之中,如果有则跳过import。因此模块之间相互引用不会导致无限循环。

    查看当前已导入模块使用下面方法

    import sys
    sys.modules
    

    得到结果是一个字典,键是模块名,值是文件所在路径

    (2)import语句与文件执行

    在这样的文件结构下

    myModule
      | first.py
      |───folder
      |   | abcd.py
      |   | __ init __.py

    folder是一个package,abcd是一个module

    import folder只是导入package,相当于执行__ init__ .py文件
    from folder import abcd则执行了__ init __ .py文件文件与abcd.py文件
    from folder.abcd import b其实也执行了 __ init __ . py 文件文件与abcd.py文件
    (要知道执行了什么,可以在这些文件之中添加print语句,看是否打印出结果)

    知道这个执行原理,可以更好理解前面得到的一些结论

    首先是在__init__.py文件中什么都没有的情况下,import folder无法调用abcd模块中的变量,是因为相当与运行了一个空文件,没有将整个包导入工作空间
    abcd模块中定义了print语句后,import两次,只有第一次会print出值,说明第二次检查出模块已在导入之列,忽略了这条import命令

    六、if __ name__ == '__ main__'有什么作用

    我们经常会在代码中看到这一句 if __ name__ == ‘__ main__’ ,为了理解它的作用,我们来看下面的例子

    在folder文件夹下新建new.py文件,里面内容为

    print(__name__)
    

    在folder文件夹下打开命令行,输入

    python new.py
    

    返回结果

    xws@MHQ0063 folder % python new.py
    __main__
    

    在myModule文件夹下打开命令行,进入python交互模式

    >>> from folder import new
    folder.new
    >>> print(__name__)
    __main__
    >>> print(new.__name__)
    folder.new
    

    在这里插入图片描述
    从测试结果可以发现直接运行文件和import文件是有差异的,差异在于二者的__ name__ 变量不同。__ name__ 变量是一个特殊的变量,每个py文件运行时都会对应一个 __ name__变量,即使在交互模式下也可以查看这个变量值。

    所以 if __ name__ == '__ main__'的作用就很好理解了,即import时不执行下面的代码,只有在直接执行这个文件时才运行之后的代码这算是一种约定俗成的写法,如果不怕文件被import,可以不用这个。

    七、os模块

    import os 是导入标准库os
    os(operation system)import os
    os(Operation System)操作系统

    有了OS模块,我们不需要关心什么操作系统下使用什么模块,OS模块会帮你选择正确的模块并调用

    参考python模块详解

    展开全文
  • threadAndPackage threadAndPackage book 《node.js实战》第7,8,9章手稿
  • 不要再浪费时间同步和更新项目的自述文件和包文件了! 到目前为止,projectz已被和直接使用,并且被2936个存储库和349个软件包间接使用。 观看谈话。 这是它可以做的一些事情: 使您的项目数据文件适当同步,...
  • 多姿多彩的袋和包.doc

    2021-09-15 23:16:22
    多姿多彩的袋和包.doc
  • SlidingMenu库和包

    2014-06-17 00:10:12
    SlidingMenu库和包SlidingMenu库和包
  • ORACLE 包和包体的创建和使用,深入浅出。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,437
精华内容 25,374
关键字:

和包