Skip to main content

Python 3 学习笔记 - 函数与类

Python函数

1、函数代码块以 def 关键词开头进行定义

def func(arg1[,arg2,arg3,…,argN]):
    [expression]

#示例(为什么每次def一个函数都是一个不开心的开始呢):
def func(x,y,z=0):
       if x > y:
          print(“>”)
       else:
          print(“<”)
       if z==1:
          return x-y

2、函数参数

必需参数

  • 调用函数,必需参数须以正确的顺序传入函数,调用时的数量必须和声明时的一样,不然会出现语法错误:
    TypeError: func() missing 1 required positional argument: 'arg'

关键字参数

  • 函数调用使用关键字参数来确定传入的参数值,不需要按定义时的顺序

默认参数

  • 定义函数时为参数赋值,如果没有传递参数值,则会使用默认值
  • 默认参数必须放在最后面

不定长参数

  • 函数定义时 *变量名 来存放所有未命名的变量参数,调用时可为空:
    def func( arg1, *vartuple ):

3、return语句

不带参数值的return语句返回None

函数返回多个值的时候,是以元组的方式返回,可以对返回的元组进行转换后使用

4、匿名函数

使用 lambda 表达式创建匿名函数:

变量名 = lambda [arg1[,arg2,arg3,…,argN]]:expression

匿名函数拥有自己的命名空间,且不能访问自有参数列表之外的或全局命名空间里的参数。


类(Class)

1、Python中类的概念跟C++ 中基本一样,基本功能:

  • 继承:即一个派生类(derived class)继承父类/基类(base class)的字段和方法。
  • 方法:类中定义的函数。
  • 方法重写:子类对从父类继承的方法进行改写/重构
  • 实例化:创建一个类的实例,类的具体对象
  • 对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

2、关键字 class 定义类

class classname:
    def __init__(self):    #类的构造函数 __init__()
       [expression]

    def func(self):          #类的方法必须有第一个参数 self,代表类的实例
       [expression]

    <statement-1>    
    .
    .
    <statement-N>

3、类对象调用

instance.objname instance.func()

4、类的继承

class SonClassName(BaseClassName1):

#父类在另一个模块中时:
class SonClassName(modname.BaseClassName):

#多父类继承:
class SonClassName(Base1, Base2, Base3):

5、类的私有属性

  • __private_attrs:__开头声明该属性为私有,不能在类的外部被使用或直接访问,在类内部的方法中使用时 self.__private_attrs
  • __private_method:__开头声明该方法为私有方法,不能在类的外部调用,在类的内部调用 self.__private_methods

6、类的专有方法:

  • __init__ : 构造函数,在生成对象时调用
  • __del__ : 析构函数,释放对象时使用
  • __call__: 函数调用
  • __repr__ : 打印,转换
  • __str__: 被打印时调用
  • __setitem__ : 按照索引赋值
  • __getitem__: 按照索引获取值
  • __len__: 获得长度
  • __cmp__: 比较运算
  • __add__: 加运算 + 
  • __sub__: 减运算 -
  • __mul__: 乘运算 ×
  • __div__: 除运算 ÷
  • __mod__: 求余运算
  • __pow__: 乘方


变量的作用域

1、Python 变量的作用域一共有4种,按查找顺序如下:

  • L (Local) 局部作用域 ,定义在函数内部的变量
  • E (Enclosing) 闭包函数外的函数中
  • G (Global) 全局作用域 ,定义在函数外的变量
  • B (Built-in) 内建作用域

2、作用域只对模块(module),类(class)以及函数(def、lambda)有效

其它代码块(如 if/elif/else/、try/except、for/while等)没有作用域定义,这这些语句内定义的变量,外部也可以访问

if True:
    msg = 'in if block'

def func():
    msg_func = 'in func block'

print(msg)
>>>in if block

print(msg_func)
>>>NameError: name 'msg_inner' is not defined

3、修改变量作用域

修改函数内部的变量,使用 global 关键字声明

def func():
   global variate

修改嵌套函数内的变量,使用nonlocal关键字声明

def func():
   i = 1
   def innerfun():
      nonlocal variate
      print(variate)
   innerfun()

Comments

Popular posts from this blog

Cloudera Hadoop 集群安装(ubuntu + CDH5.10)

前言 CDH是Cloudera公司的Hadoop发行版,基于稳定版本的Apache Hadoop构建,包含Hadoop,Spark,Hive,Hbase和一些工具等,并集成了很多补丁,可直接用于生产环境。通过Cloudera Manager可以简化hadoop各组件的部署和配置过程。 目前CDH对ubuntu支持的最高版本为14.04,因此不建议使用更高版本的ubuntu来部署CDH。 环境准备: 1.配置网络(所有节点) 修改hostname: $ sudo vi /etc/hostname cdh01 修改IP地址: $ sudo vi /etc/network/interfaces auto eth0 iface eth0 inet static         address 172.16.13.11         netmask 255.255.255.0         gateway 172.16.13.254 重启网络服务生效: $ sudo ifdown eth0 && sudo ifup eth0 修改ip与主机名的对应关系: $ sudo vi /etc/hosts 172.16.13.11 cdh01 172.16.13.12 cdh02 172.16.13.13 cdh03 2.配置SSH(所有节点) 启用root登陆(CDH5.10需要进行此步操作) $ sudo vi /etc/ssh/sshd_config #PermitRootLogin without-password PermitRootLogin yes $ sudo service ssh restart $ sudo passwd root 设置ssh无密码登陆 //在主节点上执行一路回车,生成无密码的密钥对 $ ssh-keygen -t rsa //将生成的密钥文件复制到其它节点 $ ssh-copy-id cdh02 $ ssh-copy-id cdh03 测试: 在主节点上ssh hadoop2,正常情况下,不需要密码就能直接登陆进去了。 3.安装Oracle JDK(所有节点) 运行CDH5必须使用Oracle的Jdk,需要Java 7及以上版本支持。 在Oracle的官网下载jdk包,解压到相应目录,例如/usr/java/jdk1.8.0_

Bitwarden 配置 Let’s Encrypt 证书

由于在内网环境部署的Bitwarden,不能通过安装脚本自动申请 Let’s Encrypt 的证书。 起初我用了一个自签名证书,发现特别不好使,虽然在firefox 跟 chrome 内核的浏览器上都能通过插件访问,但必须添加信任才行,特别是用Bitwarden Desktop 客户端连的时候,一直报错,可能是不认自签名证书。 于是琢磨了下怎么手动申请Let’s Encrypt的证书用于内网,对过程简单梳理如下。 自签名证书 | Self-Signed Certificate 如果你在内网环境只需要自签名证书,可以参考Bitwarden的帮助文档( Installing and depoying )进行设置: 1、生成自签名证书: //一条命创建私钥和证书: openssl req -x509 -newkey rsa:4096 -sha256 –nodes -days 10950 \    -keyout privite.key -out identity.crt \    -subj "/C= US /ST= New York /L= New York /O= Company Name /OU= CREAST /CN= bw.creast.win " 将生成的文件放到 /ssl 目录下: privite.key     ~/bwdata/ssl/ bw.creast.win/private.key identity.crt      ~/bwdata/ssl/ bw.creast.win/identity.crt 2、生成.pfx格式证书文件: //一条命令将前面生成的私钥和证书打包成需要的pfx格式文件 openssl pkcs12 -export -out ./ identity.pfx -inkey privite.key \    -in identity.crt -certfile identity.crt -passout pass: IDENTITY_CERT_PASSWORD 注意 IDENTITY_CERT_PASSWORD 跟./env/global.override.e

Tor洋葱路由的设置与使用

先说明一下,这里只是利用Tor来访问被GWF屏蔽的优秀服务(如Wikipedia、Blogger、GG App等),并不侧重于如何匿名访问网络。以下Tor设置方法适用于: MS Windows(2000/XP/Vista/Server)系统 第一步:下载并安装Tor 关于Tor(The Onion Router,洋葱路由)的工作原理,可以参考枪旗工作室的说明 ( http://tcno.net/doc/tor/#para1 )。在Windows下安装配置Tor已经非常容易了,直接下载这样一个Tor的Windows 捆绑软件包( Vidalia-Tor-Privoxy Bundle ),其中已经预先配置好这些软件能够一同工作。 安装前可以看到套件捆绑了哪些软件:Tor、Vidalia(Tor 的一个图形用户界面)和 Privoxy(Web 代理软件)、Torbutton(Firefox浏览器插件)全选这些软件进行安装。 安装完成后会自动运行Vidalia,在弹出的控制面板上可以看到当前的状态,Tor已经运行了,此时不需要再进行其它设置了。 第二步:配置浏览器使用Tor 如果使用 Firefox 浏览器,Bundle里已经附带了 Torbutton 插件 ,打开/重启Firefox就会在右下角显示Tor Enabled/Disabled,单击它可以选择是否开启Tor代理功能。 对于 Internet Explorer 没有现成的插件可用,需要手动配置代理设置,也很容易。 菜单位置 工具 - Internet 选项 - 连接 - 局域网设置 - 代理服务器 - 高级 - 服务器 在代理理服务器地址栏里填入 "localhost",端口为 "8118"(Privoxy不支持FTP代理,填不填都无所谓了);注意套接字SOCKS代理的端口为 "9050",如果有其它选项,请选择Socks5,然后"确定"即可。 对于 Maxthon ,如果对IE设置了Tor可以选择“使用IE代理设置”,或者手动添加一个代理列表,内容与上面填写的一样,然后选择应用就可以了。 这里说明一下 Privoxy 的作用,因为当直接使用 SOCKS 代理时,浏览器会泄露