内置函数
python中有很多内置的函数,根据官方文档做一个简单的示例。
abs
即返回一个数的绝对值,这个数可以是整数也可以是浮点数。
n = input('输入一个整数:') res = abs(int(n)) # 整数 print(n,'的绝对值为:',res)
如上所示,我们这样就可以求一个整数的绝对值。 注意,#是注释的标识符,和cfg文件类似。
all
如下,只有当所有的满足条件时,才返回True,否则返回False。 注意:all只接受一个参数,如这里的list。
res1 = all([5, 6, 8, 10]) #True res2 = all([0, 6, 8, 10]) #False res3 = all(['hello', 'world', 'wayne']) #True res4 = all(['hello', 'world', '']) #False
any
当any接受的参数里只要一个满足,就会返回False。
res1 = any([5, 0, 8, 10]) #True res2 = any([0, 0, 0, 0]) #False res3 = any(['hello', 'world', 's']) #True res4 = any(['', '', '']) #False
ascii
ascii()返回一个字符串,但是对于参数中的非ASCII字符通过repr()函数使用/x,/u或/U编码的字符。
res1 = ascii('wayne') #'wayne' res2 = ascii(65) #'65' res3 = ascii('中文') #'u4e2du6587'
如上所示,如果接受的参数是ascii字符,则直接返回,否则采用其他方式返回字符。
bin
这个函数可以将一个数转换为二进制数,如下:
res1 = bin(-96) # -0b1100000 res2 = bin(65) # 0b1000001 res3 = bin(8) # 0b1000
bool
即接受一个参数,然后返回True或者是False。
res1 = bool(-96) # True res2 = bool(0) # False res3 = bool('wayne') # True res4 = bool('') # False
help
这个函数的功能非常强大,接受一个字符串作为参数,可以是函数的名称、关键字等,如下所示:
>>> help('abs') Help on built-in function abs in module builtins: abs(x, /) Return the absolute value of the argument. >>> help('continue') The "continue" statement ************************ continue_stmt ::= "continue" "continue" may only occur syntactically nested in a "for" or "while" loop, but not nested in a function or class definition or "finally" clause within that loop. It continues with the next cycle of the nearest enclosing loop. When "continue" passes control out of a "try" statement with a "finally" clause, that "finally" clause is executed before really starting the next loop cycle. Related help topics: while, for >>> help('help') Help on _Helper in module _sitebuiltins object: help = class _Helper(builtins.object) | Define the builtin 'help'. | | This is a wrapper around pydoc.help that provides a helpful message | when 'help' is typed at the Python interactive prompt. | | Calling help() at the Python prompt starts an interactive help session. | Calling help(thing) prints help for the python object 'thing'. | | Methods defined here: | | __call__(self, *args, **kwds) | Call self as a function. | | __repr__(self) | Return repr(self). | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
如上,如果我们对于某个函数如何使用不了解,就可以使用help函数进行查找。
input
这个函数使用频率很高,即接受一个字符串作为参数,提示输入,并含有返回值。
iter
这个函数用来生成迭代器,如下:
lst = [1, 2, 3] for i in iter(lst): print(i)
实际上,对于这里的for循环,直接是for i in lst:也是可以的,那为什么还要使用iter()生成迭代器呢,我们接下来看看next()便知道了。
next
next函数的作用就是生成迭代器的下一个元素,如果没有了,则报StopIteration错误,就可以被捕获了。
it = iter([1, 2, 3, 4, 5]) while True: try: x = next(it) print(x) except StopIteration: break
sum
这个函数接受一个可迭代的参数,返回他们的和,如下:
>>> sum([1, 5, 6]) 12 >>> sum((5, 85, 6)) 96 >>> sum(iter([5, 63, 0])) 68
list
我们知道元组和列表的区别是前者不可改变,而后者可以改变,如果我们希望将元组改为列表,就可以使用list函数,如下:
如上所示,a是列表,所以可修改,而b是元组,不可修改,我们使用list使之成为列表,就可以修改了。
id
id可以获取到对象的内存地址,如下:
>>> a = 'wayne-zhu' >>> id(a) 59391056 >>> b = 1118 >>> id(b) 58188416
complex
此函数可以定义成a + bj的复数,接受两个参数,第一个参数为a,第二个参数为b,如果只有一个参数,即b = 0,如下:
>>> complex(1) (1+0j) >>> complex(1, 2) (1+2j) >>> complex(-1, 2) (-1+2j)
函数定义
在python中,定义一个函数可以使用 def 语句,接着是函数名, 括号、参数、冒号,接着就是函数体、返回值等,并需要注意其中的缩进,如下:
def abs_self(x): if x > 0: return x else: return -x a = int(input('请输入一个非0的整数:')) print(abs_self(a))
如上所示,我们可以看到使用了def定义了这样的一个函数。 当然,我们也可以定义一个没有返回值的函数,函数会自动返回None。
另外,我们还可以使用pass关键词定义一个空函数,如下:
def kong(): pass kong() print('over')
在这个函数中,pass就是函数体,这样至少可以保证函数的格式没有问题,同样也可以用在if等语句中。
python也可以返回多个值,如下:
import math def move(x, y, step, angle): nx = x + step * math.cos(angle) ny = y + step * math.sin(angle) return nx,ny x, y = move(100, 100, 50, math.pi/6) print(x, y)
我们首先引入了math模块,这样就能使用math.cos和math.sin这样有用的函数了,然后定义了这样一个move函数,接着使用x,y作为接受结果的变量,结果如下:
143.30127018922195 125.0
但python函数真的返回了两个值吗?我们看下面的例子:
import math def move(x, y, step, angle): nx = x + step * math.cos(angle) ny = y + step * math.sin(angle) return nx,ny r = move(100, 100, 50, math.pi/6) print(r)
结果如下:
(143.30127018922195, 125.0)
可见,这个函数实际上是返回了一个tupple,只是之前的写法更为方便。
函数参数
在python中,我们可以设置默认参数,它可以降低函数的复杂度,如下所示:
def enroll(name, sex, age, address): print('name:', name) print('sex:', sex) print('age:', age) print('address:', address) print(' ') enroll('wayne', 'm', 7, 'xinjiang') enroll('hedy', 'f', 7, 'xinjiang') enroll('baby', 'm', 0, 'xinjiang') enroll('mark', 'm', 8, 'japan')
上面这个函数是在一年级注册学生名单,可以发现,大多数学生的年龄都是7岁,地点都是在xinjiang,因此,如果使用这种方法会造成浪费,而如果使用默认参数呢? 如下:
def enroll(name, sex, age = 7, address = 'xinjiang'): print('name:', name) print('sex:', sex) print('age:', age) print('address:', address) print(' ') enroll('wayne', 'm') enroll('hedy', 'f') enroll('baby', 'm', 0, 'xinjiang') enroll('mark', 'm', 8, 'japan')
这样,可以发现,尤其是在条目比较多的时候,函数的调用就会非常简单。
注意:默认参数必须是默认的在后面,并且一般把变化少的设置为默认的,变化多的不是默认的。另外,默认参数可以使得程序更为简洁。
另外,可变参数也是我们常常需要遇到的。
def add(numbers): sum = 0 for i in numbers: sum += i print(sum) add([1, 2, 3])
如上所示,我们在调用函数时,参数为一个list,但是这时要多加一个[],比较麻烦,所以我们可以使用可变参数,即在函数参数前添加一个*,如下:
def add(*numbers): sum = 0 for i in numbers: sum += i print(sum) add(1, 2, 3)
但是,这样的结果是我们如果有一个list,还需要单独的拆开调用,如下:
def add(*numbers): sum = 0 for i in numbers: sum += i print(sum) l = [5, 6, 7] add(l[0], l[1], l[2]) #18
这样又比较麻烦了, 而python允许你这样调用:
def add(*numbers): sum = 0 for i in numbers: sum += i print(sum) l = [5, 6, 7] add(*l) #18
即在调用时在list之前添加*。
除此之外,关键字参数也是我们常见的。而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。如下:
def person(name, age, **kw): print('name', name, 'age', age, 'other', kw) person('wayne', 22, school='xjtu', home='xj')
结果如下;
C:UsersAdministratorDesktop>python foo.py name wayne age 22 other {'school': 'xjtu', 'home': 'xj'}
关键字参数可以扩展函数的功能。比如在用户注册时,name和age是必填项,还有一些选填项,如果用户也填写了,我们通过关键字参数就可以获取到。
我们还可以使用下面的方式改写:
def person(name, age, **kw): print('name', name, 'age', age, 'other', kw) extra = {'school': 'xjtu', 'home': 'xj'} person('wayne', 22, **extra)
这种方式得到的结果也是一样的。且推荐这种写法,函数参数定义和调用时一致的,且可扩展性和易读性都不错。