技术标签: python函数和方法概念
关于函数的一些基本概念
2015年8月9日
17:49
函数属性:可以给函数添加任意属性
Def foo()
foo.secure=1
foo.private=1
函数的作用域:在函数内部如何访问全局变量?只想读取变量的值(也就是不想重绑变量)
print(参数+external)引用全局变量
问题:若局部变量或者参数的名字和想要访问的全局变量名相同的话,就不能直接访问了,全局变量会被局部变量所屏蔽。
若需要,可使用globals函数获得全局变量值。
Print (参数,globals['参数']).
如何重绑全局变量。若在函数内部将值赋予一个变量,它会自动成为局部变量。除非告知Python将其声明为全局变量。
在函数与编程中,在函数中对变量进行赋值时,这些变量始终绑定到该函数的局部命名空间中,
在函数中,如果想给全局变量赋值,则需要用关键字global声明,例如:
x =50
deffunc():
globalx
print('x的值是',x)
x =2
print('全局变量x改为',x)
func()
print('x的值是',x)
嵌套作用域
嵌套:可以将一个函数放在另一个里面,外层函数返回里层函数,被返回的函数本身并没有被调用。返回的函数还可以访问它带着的环境和相关的局部变量。
Def fa(n):
if n==1:
return 0
else:
Return n*f(n-1).
更加抽象:
创建自己的对象类型:(尤其是类型或者是被称为类的对象,是python的核心概念)
多态:意味着可以对不同类的对象使用同样的操作。
封装:对外部世界隐藏对象的工作细节。
继承:以普通类为基础建立专门的类对象。
isinstance函数:查看对象是否为元组。
很多函数和运算符都是多态的,唯一能够毁掉多态的就是使用函数显示地检查类型。
如何定义类:__metaclass__=type #确定能够使用新式类
Class 类名:
def 1(self,参数)其中self是对对象自身的引用,在调用函数1时,foo自动将自己作为第一个参数传入函数中。对于self参数而言,方法将它们的第一个参数绑定到所属的实例上,故self参数可以不必提供。
Foo=类名()
Foo.1(‘参数”)
python并不直接支持私有方式,而是要靠程序员在外把握。
为了让方法或特性变为私有(从外部无法访问,只要在它的名字前面加上双下划线即可。
Class类名:
def __inaccessible(self):
def accessible(self):
self.__inaccessible() 最关键的一步 ,私有函数是无法从外界访问的,而在类内部的共有函数还可以继续访问。
在类的内部定义中,所有以双下划线开始的名字都被翻译成前面加上单下划线和类名的形式:_类名__私有函数的形式。
类的命名空间 :所有位于class语句中的代码都在特殊的命名空间————类命名空间。这个命名空间可由类内所有成员访问。
有些语句支持多种层次的成员变量(私有性),尽管单双下划线在某种程度上给出了两个级别的私有性,但python并没有真正支持私有化。
如何扩展超类: 子类可以扩展超类的定义。将其他类名写在class语句后的圆括号内可指定超类:
class filter():
def __init__(self):
self.blocked=[ ]
class新类名(filter):
此时新类名为filter的子类,而filter为新类名的超级类。
Definit(self):#重写filter超类中的init的方法。
如何调查继承:如果想要看一个类是否是一个类的子类,可使用内建的issubclass函数
issubclass(子类,超类)
如果想要知道已知类的基类(们 ),[一般来说是针对子类来说的],,可直接使用它的特殊特性__bases__:
例子:spamfilter.__bases__
同样道理,还能使用isinstance方法检查一个对象是否是一个类的实例:
isinstance(函数 ,类)
如果只想知道对象属于哪一个类,可用__class__特性。
s.__class__:查看对象S属于哪一个类。
如何检查所需方法是否已经存在?Hasattr(对象,'方法')
如何检查一个特性是否调用?Hasattr(x,'call')
如何设置对象的特性:setattr(tc, ,'name','xxoo')
g关于面向对象设计的思考:
1、将属于一类的对象放在一起
设计类的方法:1、写下问题的描述(程序要做什么?)
2、对于所有名词,用作可能的类
3、对所有动词,用作可能方向。
多个超类: 例子classA:
def a:
class B:
def b:
class(A,B):
pass。
子类C:自己不做任何事情,它从自己的超类继承所有的行为。
这种行为成为多重继承,是个非常有用的工具。当使用多重继承时,若一个方法从多个超类继承(两个具有相同名字的不同方法),必须要注意超类的顺序:
先继承类中的方法会重写后继承的类中的方法。 在查找给定方法或特性时,访问超类的顺序被称为MRO(方法判定顺序)。
type函数:
def dump(value):
print (type(value),value)
接口和内省:
接口:和多态有关。在处理多态对象时,只要关心它的接口——也就是公开的方法和特性。
不用显式地指定对象必须包含哪些方法才能作为参数来接收。一般来讲,只需要让对象符合当前的接口。
内置函数:__builtins__模块包含了这些函数。
Enumrate[iter.[initial,value)给定可迭代对象,返回新迭代器,
i = 0
seq = ['one', 'two', 'three']
for element in seq:
print i, seq[i]
i += 1
#0 one
#1 two
#2 three
for
i,j in enumerate('abc'):
print(i,j)
seq
= ['one', 'two', 'three']
for i, element in enumerate(seq):
print i, seq[i]
Setattr(object,name,value)
其中name是字符串,与object.name=value的意思相同。
数学运算:
Demical:定义了两种基本数据类型:
1、表示十进制数的Demical类型。
2、一种表示与精度和四舍五入错误等计算有关的各种参数的context类型。
如何改变精度并执行计算:
Decimal.getcontext().prec=3 改变计算的精确度
只改变某个语句块的精度
With
decimal.localhost(decimal.context(prec=10))
来源丨插座学院(ID:chazuomba)作者丨崔叔1、真正的高手,从不侥幸,随时都在做好准备什么是高手,就是当一件事请交给他,你从来不用担心后果。因为他就是代表着稳定、高执行力,和确定感。58 岁的维克斯曾是加拿大国会侍卫长,他负责国会的行政和礼仪,每天扛着议会权杖步入会场。但是八年来,他每周都会做好射击和其他体能训练的各项准备。2014 年 10 月 22 日,一名枪手杀死一人后冲..._阿里,红利青睐有准备的人
SVN - SVN的错误:Error: Can't connect to host '': 由于目标机器积极拒绝,无法连接 SVN的错误:Error: Can't connect to host '': 由于目标机器积极拒绝,无法连接。2009年08月03日 星...
#pragma warning(disable:4996)#include<iostream>#include<cstring>#include<cstdio>using namespace std;int main(){ int g1, s1, k1, g2, s2, k2; scanf("%d.%d.%d %d.%d.%d", &g1, &s1, &k1, &g2, &s2, &k2); int su
Windows消息大全Windows消息目录1. WM_NULL=$0000:2. WM_CREATE=$0001: 应用程序创建一个窗口3. WM_DESTROY=$0002: 一个窗口被销毁4. WM_MOVE=$0003: 移动一个窗口5. WM_SIZE=$0005:改变一个窗口的大小6. WM_ACTIVATE=$0006: 一个窗
关键字: rar 解压缩 Linux/Unix Fedora 归档管理器正文:以rar为扩展名的文件是Windows下的压缩文件,怎么在Linux/Unix平台下解压缩呢?这里介绍两种方法:1.下载解压缩rar的Linux/Unix版本,下载地址为http://www.linuxeden.com/download/DownSoft/?softid=1350下载后解压缩并执行以下命令:#make#m_压缩平台unix
org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from file [D:\apache-tomcat-8.0.37-windows-x64\apache-tomcat-8.0.37\webapps\fuyang\WEB-INF\clas
instanceof操作: 决定对象是否是指定类型的实例指令格式: instanceof indexbyte1 indexbyte2指令码: instanceof = 193 (0xc1) 指令执行前后的栈顶状态: ..., objectref → ..., r...
准备破解frame数据格式,用UE打开一开,很明显的发现了Serializer_v1.10这几个字样,很明显,是采用Serializer这个类来写入的而且应该是SkeletonSerializer,为了验证,UE看看二进制代码,先看看此类的几个文件块枚举 enum
微博iOS端SDK的使用方法,后来发现有个Bug,登出后,再次登入会跳过授权界面,直接进入发送微博界面,这样让用户想登出换个账号绑定应用发微博得不到实现,登出功能实际上没起作用,这里是解决方法:找到导入src文件夹中的WBAuthorize.m文件,把startAuthorize函数的这里按下面代码这么改,字典添加@”true”,@”forcelogin”- (vo
Java中byte用二进制表示占用8位,而我们知道16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),所以我们就可以把每个byte转换成两个相应的16进制字符,即把byte的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到byte转换到16进制字符串的结果new String(H) + new String(L)。即byte用十六进制表示只占_java 16进制字节转字符串
setiosflags的参数是该流的格式标志值,这个值由如下位掩码(ios枚举器)指定,并可用位或OR(|)运算符进行组合: ios::skipws 在输人中跳过空白。 ios::left 左对齐值,用填充字符填充右边。 ios::right 右对齐值;用填充字符填充左边(缺省对齐方式)。 ios::internal 在指定任何引导标记或基之
小白在Mac上安装TensorFlow教程谷歌太良心,所以想用用TensorFlow,在安装过程中踩过太多的坑,希望后来的人不要踩,网上有许多安装TensorFlow的教程,都需要一定的编程基础,而且时间比较早,TensorFlow版本都更新了,原来安装可能需要注意的问题,现在不需要了。话不多说,来干货。介绍因为TensorFlow用的语言主要是Python,所以得安装编程语言,Mac自带...