码迷,mamicode.com
首页 > 编程语言 > 详细

python内置函数(二)

时间:2015-07-27 15:09:41      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

python内部提供了很多内建函数。下面让我们从a-z开始学习python的内建函数


1.1

callable(object)

如果object参数是可以调用的对象(callable),则返回true,否则就返回false。

a = 123

def fun():

print("hello")

print(callable(a))

print(callable(fun()))

输出的结果是:

False

hello

False

func()是可以调用的对象,所以返回true,但是变量a不是,所以返回false


1.2

chr(i)

返回unicode代码是i的字符

print(chr(97))

输出的结果是:a

i的有效只范围是0~1114111,超过范围会报错。


1.3

classmethod(function)

把类函数当作类的一个方法返回。类方法第一个参数是指明类,跟类中函数一样,第一个参数是指明类实例。类方法修饰符采用下面的格式来使用:


class C:


@classmethod


def f(cls, arg1, arg2, ...):


...


从上面格式来看,@classmethod是函数在前置的一个修饰符,可以查看语言参考手册。经过类方法修饰符的函数,可以直接通过类来调用,比如C.f()方式;也可以通实例的方式来调用,比如C().f()方式,但这个实例在这个函数里被忽略掉了,没起到什么作用。如果类方法修饰符的函数,在继承类时,派生类作为第一个参数传递给这个函数,也就是cls等于派生类。


 


类方法修饰符定义的函数与C++或JAVA里静态函数是不一样的,如果要相似的功能,需要使用另外一个修饰符staticmethod。


classmethod设计的目的是什么呢?其实与Python面向对象编程有关的,因为Python不支持多个的参数重载构造函数,比如在C++里,构造函数可以根据参数个数不一样,可以写多个构造函数。Python为了解决这个问题,采用classmethod修饰符的方式,这样定义出来的函数就可以在类对象实例化之前调用这些函数,就相当于多个构造函数,解决多个构造函数的代码写在类外面的问题。


与修饰符staticmethod的区别是类方法有一个类型参数,而静态方法没有。静态方法主要用来解决全局函数的作用域的问题,而类方法是解决多个构造函数的问题,因此应用场境不一样。

1.3这个函数的说明引用来自csdn:http://blog.csdn.net/caimouse/article/details/41016797


1.4

complex([real[,imag])

大多数有语言基础的应该都很了解这个complex不管入门哪种语言,感觉刚开始都回去写一个复数类

complex([real[,imag]])

返回一个复数,并且格式是:

real + imag * j

当然,你可以把一个字符串或者一个数字转换为一个复数,如果第一个参数real就是一个字符串,那么这个字符串就会被理解成复数。并且不需要第二个参数

complex就会立即执行。字符串只能是第一个参数,第二个参数绝不可能是字符串的。当你传入的参数是字符串,这个字符串一定不能包含空格,否则会报错

请看几个实例:

print(complex(1,2))

输出的结果是:(1+2j)

print(complex(1))

输出的结果是:(1+0j)

print(complex(‘1+2j‘))

输出的结果是:(1+2j)

print(complex(‘1 + 2j‘))

报错:ValueError: complex() arg is a malformed string


1.5

delattr(object,name)

函数的参数包括一个obj和一个字符串,字符串必须是obj的属性,这个函数删除指定的属性。

class example:

pass

a = example()

setattr(a,‘ok‘,‘hello‘)

print(‘before--a.ok:‘,a.ok)

delattr(a,‘ok‘)

print(‘after--a.ok:‘,a.ok)

看看输出的结果:

before--a.ok: hello

Traceback (most recent call last):

  File "D:\Python\xode\try.py", line 7, in <module>

    print(‘after--a.ok:‘,a.ok)

AttributeError: ‘example‘ object has no attribute ‘ok‘

显然,a的‘ok‘属性被删除。


1.6

dir([object])

参数object可选,当没有参数时,返回当前范围内的列表名;有参数的时候,试图返回该对象的有效属性列表

如果这个对象有一个方法名:__dir__(),这个方法将被调用并且返回其属性列表。如果对象没有提供__dir__()

,这个函数会试图去从对象的__dict__属性收集信息。

这是python3.4.3文档给出的例子:

>>> import struct

>>> dir()   # show the names in the module namespace

[‘__builtins__‘, ‘__name__‘, ‘struct‘]

>>> dir(struct)   # show the names in the struct module 

[‘Struct‘, ‘__all__‘, ‘__builtins__‘, ‘__cached__‘, ‘__doc__‘, ‘__file__‘,

 ‘__initializing__‘, ‘__loader__‘, ‘__name__‘, ‘__package__‘,

 ‘_clearcache‘, ‘calcsize‘, ‘error‘, ‘pack‘, ‘pack_into‘,

 ‘unpack‘, ‘unpack_from‘]

>>> class Shape:

...     def __dir__(self):

...         return [‘area‘, ‘perimeter‘, ‘location‘]

>>> s = Shape()

>>> dir(s)

[‘area‘, ‘location‘, ‘perimeter‘]



1.7

divmod(a,b)

需要两个数字参数,并且返回一系列由这两个参数整除而产生的商和余数

对于不同的操作符,运用二进制算术运算符

1.对于整数integers,这个函数的运算结果是(a//b,a%b)

2.对于浮点数float,这个函数的运算结果是(q,a%b),其中q = math.floor(a/b)

几个实例:

print(divmod(15,4))

运算的结果是:(3, 3)

print(divmod(15.2,4))

运算的结果是:(3.0, 3.1999999999999993)

print(divmod(15.2,0))

ZeroDivisionError: float divmod()


1.8

enumerate(iterable,start = 0)

返回一个枚举(enumerate)对象,iterable必须是一个可以迭代的对象,

people = [‘girl‘,‘boy‘,‘man‘,‘woman‘]

print(list(enumerate(people)))

返回的结果是:

[(0, ‘girl‘), (1, ‘boy‘), (2, ‘man‘), (3, ‘woman‘)]

如果这样

print(list((enumerate(people,start = 5))))

返回的结果是:

[(5, ‘girl‘), (6, ‘boy‘), (7, ‘man‘), (8, ‘woman‘)]

可以看出第二个参数start是开始枚举开始的序号。默认是0。



1.9

eval(expression, globals=None, locals=None)

参数是一个字符串,和可选的全局和本地,如果提供了全局这个参数,那么

全局参数必须是一个字典对象。如果提供本地参数,本地必须是映射对象。

x = 1

print(eval(‘x+1‘))

输出是:2


江苏南京   钟志远  904727147

python内置函数(二)

标签:

原文地址:http://my.oschina.net/u/2391943/blog/484208

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!