Python笔记2——默认参数,可变参数,关键字参数,参数组合

来源:互联网 发布:数据埋点是什么意思 编辑:程序博客网 时间:2024/06/13 06:25
1.借助抽象,我们才能不关心底层的具体计算过程,而直接在更高的层次上思考问题;写计算机程序也是一样,函数就是最基本的一种代码抽象的方式
2.abs()求绝对值的函数
3.cmp()比较两个值大小的函数
4.数据类型转换函数:int(),float(),str(),unicode(),bool()
5.函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”,如:x=abs       x(-1)的值为1
6.return None可以简写为return
7.空函数:
用pass语句可以定义一个什么都不做的空函数,pass主要作为占位符,现在还没想好怎么写的函数可以先放一个pass,让代码能运行起来。缺少了pass,运行会报错
8.自定义函数要注意进行参数检查,数据类型检查可以用内置函数isinstance 实现
9.函数可以返回多个值,比如游戏中从一个点移动到另一个点,需要返回x,y横纵坐标。但是所谓的返回多个值,实质上是返回一个tuple
10.默认参数:
必须指向不可变对象!为什么要设计str、None这样的不变对象呢?因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。
11.可变参数:
就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个.定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了一个 * 号(如:def calc(*numbers):)。在函数内部,参数 numbers 接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数.
12.关键字参数:
允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict(如:def person(name,age,**kw):).它可以扩展函数的功能。比如,在 person 函数里,我们保证能接收到 name 和 age 这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
13.参数组合:

在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数(如:def func(a, b, c=0, *args, **kw):)。

14.递归函数,定义简单,逻辑清晰。但是递归要防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以递归调用次数过多,会导致溢出。
15.解决递归调用栈溢出的方法是通过尾递归优化。但是Python以及大多数编程语言没有所谓的尾递归优化,任何递归函数都存在栈溢出的问题。


这一节有待深入学习。
阅读全文
0 0
原创粉丝点击