python函数基础
2016-10-16 18:04
357 查看
一、基础
函数的定义
def 函数名(参数): ... 函数体 ... 返回值 #如果函数执行完毕也没有return语句时,自动return None。
空函数
如果想定义一个什么事也不做的空函数,可以用pass语句:def nop(): pass() #pass语句什么都不做,用来作为占位符。
参数检查
调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError;如果参数类型不对,Python解释器无法检查,可通过内置函数isinstance()来实现。li = [] ret = isinstance(li,list) print(ret) #True
返回值
在python中根据返回对象的个数不同,返回结果的数据类型也不同返回对象的个数 | 返回类型 |
---|---|
0 | NoneType |
1 | 取决于返回对象的数据类型 |
>1 | tuple |
def f1(): return def f2(): return True def f3(): return 1,2,3 print(type(f1())) #<class 'NoneType'> print(type(f2())) #<class 'bool'> print(type(f3())) #<class 'tuple'>
二、参数
普通参数
# ######### 定义函数 ######### # name 叫做函数func的形式参数,简称:形参def func(name): print name # ######### 执行函数 ######### # 'morra' 叫做函数func的实际参数,简称:实参 func('morra')
指定形参传入实参
def func(p, text, subject): ret = p + text + subject return ret print(func(subject="XXX", p="123", text="OK")) ##使用该方法后不需要按顺序传入实参
默认参数
默认参数可以简化函数的调用,但是需要放在参数列表最后,并且必须指向不变对象。def func(name, age = 18): # print "%s:%s" %(name,age) func('morra', 19) # 指定参数 func('hello') # 使用默认参数
动态参数一(可变参数)
def func(*args): #在形参前加*之后args变成动态参数,该参数的数据类型变成了tuple元组 print(type(args)) #<class 'tuple'> print(args) # 执行方式一 func(11,33,4,4454,5) #可传入数字、字符串、列表、元组等等 # 执行方式二 #这里需要注意一下,如果写func(*li) ,则表示把list转换为tuple再传入实参;如果写的是func(li)那么就表示把list当做tuple的元素()传入实参。 li = [11,2,2,3,3,4,54] func(*li)
动态参数二(关键字参数)
def func(**args): #在形参前加**之后,该参数的数据类型变成了dict字典 print(type(args)) #<class 'dict'>print args print(args) # 执行方式一 func(name='morra',age=18) # 执行方式二 li = {'name':'morra', age:18, 'gender':'male'} func(**li)
命名关键字参数
用来限制传入关键字参数的名字def person(name, age, *, city, job): #*不是参数,而是特殊分隔符 print(name, age, city, job) person('morra', 18, city='beijing', job='engineer') OUTPUT: morra 18 beijing engineer
命名关键字参数必须传入参数名,否则会报错:
def person(name, age, *, city, job): print(name, age, city, job) person('morra', 18, 'beijing', 'engineer') OUTPUT: Traceback (most recent call last): File "C:/test.py", line 6, in <module> person('morra', 18, 'beijing', 'engineer') TypeError: person() takes 2 positional arguments but 4 were given
动态参数三(万能参数)
def func(*args, **kwargs): print args print kwargs
*参数定义的顺序
必选参数 > 默认参数 > 可变参数/命名关键字参数 > 关键字参数
三、补充
三目运算:
学习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即:# ###################### 普通条件语句 ###################### if 1==1 : name = "hello" else: name = "world" # ###################### 三目运算 ###################### name = "hello" if 1==1 else "world" print(name)
lambda表达式
对于简单的函数,也存在一种简便的表示方式,即:lambda表达式# ###################### 普通函数 ###################### # 定义函数(普通方式) def func(arg): return arg + 1 # 执行函数 result = func(123) # ###################### lambda ###################### # 定义函数(lambda表达式) my_lambda = lambda arg : arg + 1 # 执行函数 result = my_lambda(123)
四、递归
py标准的解释器没有针对尾递归做优化,因此任何递归函数都存在栈溢出的问题。练习
# 利用递归函数计算阶乘 # N! = 1 * 2 * 3 * ... * N def fact(n): if n == 1: return 1 return n * fact(n-1) print('fact(1) =', fact(1)) print('fact(5) =', fact(5)) print('fact(10) =', fact(10)) # 利用递归函数移动汉诺塔: def move(n, a, b, c): if n == 1: print('move', a, '-->', c) return move(n-1, a, c, b) print('move', a, '-->', c) move(n-1, b, a, c) move(4, 'A', 'B', 'C') # 斐波那契数列 def func(a, b): if a == 0: print(a, b) c = a + b print(c) func(b, c) func(0, 1)
相关文章推荐
- python基础31[__XXX__函数]
- [Python入门及进阶笔记]Python-基础-函数小结
- 【语言处理与Python】4.3风格的问题/4.4函数:结构化编程的基础/4.5更多关于函数
- Python学习入门基础教程(learning Python)--8.3 字典常用的方法函数介绍
- Python学习入门基础教程(learning Python)--6.4 Python的list与函数
- Python连载系列之Python语法基础2:Python中的函数
- Python基础-函数(function)
- python基础学习-3(函数)
- python基础31[__XXX__函数]
- Python学习入门基础教程(learning Python)--2 Python简单函数设计 .
- Python基础知识(四)--函数
- PYTHON基础学习之操作类的一些函数
- Python基础07 函数
- python基础学习-3(函数)
- Python基础07 函数
- 【Python基础】函数
- Python基础(3):函数
- python 函数基础
- Python修炼--常用字符串、数学函数 分类: python基础学习 2013-06-16 13:23 205人阅读 评论(0) 收藏
- Python学习入门基础教程(learning Python)--2.1 Python下自定义函数 .