温故知新python3--基础知识2(函数基础)
来源:互联网 发布:粒子群算法电子书 编辑:程序博客网 时间:2024/06/05 14:10
我们的目标是星辰大海,fighting!
以下内容为个人学习“廖雪峰python3教程”的学习笔记。
参考网站:
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000
函数是最基本的一种代码抽象。以下内容将涉及:函数的调用、函数的定义、函数的参数及递归函数。
函数的调用:
TypeError:调用函数时所用的参数数量或类型不符合函数要求。
有些函数如max的参数个数是没有限制的。
函数名实际上是对函数对象的引用,因此能把它赋给其他变量,从而达到不同变量可调用相同函数的效果。
强调一下,python的print与C中的print还是有一点差别的,在前一章中我把两者混为一谈了,实在抱歉。print(“内容 %格式符” %变量)这样才能得到正确的输出!!!
函数的定义:
函数内的语句执行到return语句时,将跳出;如果没有return语句,则将在执行结束后返回None。
空函数:在函数语句中只放语句pass即可。此外pass还可以用在如判断语句等的处理中,用来跳过该处。
为了提供不同参数使用问题带来的程序报错信息,在进入函数时,常常使用内置函数对参数进行判断,比如: if not isinstance(x,(int,flaot)): raise TypeError(‘bad operand type’)。
补充关于元组的一点点知识:
tu = (1,2)
a, b = tu
可以使a等于1,b等于2,记住:这种情况下,变量数必须等于元组成员数,否则会出问题。
函数的参数:
python的函数可以带默认参数、可变参数、必选参数、关键字参数,这将使得函数的功能十分强大,同时降低了调用难度。
如果函数带多个参数,则调用时,参数的顺序可以不遵循原定义的顺序,但必须指明是和参数。
由于定义函数时,将会创建默认参数的对象,如果默认参数是可变对象,则在每一次调用时如果改变了该参数的值,则下一次调用时,该参数已经不是原定义函数的参数值了,而是上次调用的结果。因此,使用默认参数时必须将默认参数指向如str、None之类的不可变对象。
def my_abs(n, m = [-1,-2]): n = abs(n) i = len(m) while i>0 : m[i-1] = abs(m[i-1]) i -= 1 m.append(1) return n, m
运行得到如下结果:
>>>my_abs(-1,[-2,-3])(1, [2, 3, 1])>>>my_abs(-1)(1, [1, 2, 1])
而参考网站中的例子:
def add_end(L=[]): L.append('END') return L
运行得到如下结果:
>>> add_end()['END', 'END']>>> add_end()['END', 'END', 'END']
这似乎说明,默认参数指向可变对象时,调用函数候默认参数是否会被改变是不确定的,因此,定义函数时,应使默认函数指向不可变对象。
可变参数:即参数的数目可以发生改变。如果使用列表或者元组,则代码写起来比较繁琐,可以直接在变量钱添加*符号,从而使其成为可变参数。此外,在list或者tuple前添加星号可以将其变成可变参数从而传递进去。
可变参数用两个星号定义,如**kw,在调用函数时可以赋任意个数的参数,这些参数最终将根据给定的参数名自动组合成为字典。
def person(name, age, **kw): print('name:', name, 'age:', age, 'other:', kw)
>>> person('Bob', 35, city='Beijing')name: Bob age: 35 other: {'city': 'Beijing'}>>> person('Adam', 45, gender='M', job='Engineer')name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
*表示将变量的成员当作list或tuple的成员传递进函数。
**表示将变量的成员当作字典成员传递进函数。
命名关键字参数:为了得到指定的参数(包括限定参数的个数),可以使用‘参数1, *, 参数2,参数3’的格式,使得函数在调用时,必须指定星号后的参数名,如my_abs(1,参数2=0,参数3=9)。如果不这样调用,则会报错。
小结:可变参数用星号;关键字参数用两个星号;命名关键字参数用星号加逗号。
参数组合:按照“必选参数、默认参数、可变参数、命名关键字参数、关键字参数”顺序可以定义有多种参数类型的函数。
递归函数:一般递归函数和尾递归函数。一般递归函数在return后加上了表达式,而尾递归函数则在return调用函数。大多数编译器包括python编译器,对尾递归函数并没有进行优化,递归次数较大时,就会出现溢出问题。
一般递归函数:
def fact(n): if n==1: return 1 return n * fact(n - 1
尾递归函数:
def fact(n): return fact_iter(n, 1)def fact_iter(num, product): if num == 1: return product return fact_iter(num - 1, num * product)
好啦,函数的基础知识就先到这里啦,我得放下去这边,先去写一小片代码,晚点见。
- 温故知新python3--基础知识2(函数基础)
- 温故知新python3--基础知识3(函数高级特性)
- 温故知新python3--基础知识1
- python3函数基础知识一
- Python3基础(五) 函数
- 温故知新 Java基础(一)
- 温故知新 Java基础(二)
- Python3 基础:定义函数
- python3基础-函数
- 温故知新,基础复习(二叉堆排序)
- 【温故知新(一)】Java基础数据类型
- python3基础学习(2)
- 温故知新-应用基础知识学习笔记
- 温故知新--XML基础
- java基础_温故知新
- python3 高阶函数基础
- 温故知新,PHP函数篇
- 温故知新(五):函数
- pycharm在ubuntu xfce下面Alt+insert快捷键冲突解决
- Python迭代器简介
- HDU-1850-Being a Good Boy in Spring Festival 【nim博弈】
- EJB的六大角色
- 求count的值
- 温故知新python3--基础知识2(函数基础)
- hdu 3715 2-sat + 二分
- 并查集入门--hd1874 起点终点设定 dj+fl
- [PAT甲级]1008. Elevator (20)(求电梯运行时间)
- 【poj 3401 二分图最大匹配】
- PHP基础教程-27 课后作业06
- 【KMP+优化】HDU 6153/CCPC 1003 A Secret
- 2017.8.20暑假集训第二十一天
- Unity进阶技巧