一、基础

函数的定义

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函数基础的更多相关文章

  1. 《转》Python学习(17)-python函数基础部分

    http://www.cnblogs.com/BeginMan/p/3171977.html 一.什么是函数.方法.过程 推荐阅读:http://www.cnblogs.com/snandy/arch ...

  2. Python 函数基础、有序集合、文件操作(三)

    一.set 特点: set是一个无序且不重复的元素集合访问速度快:天生解决元素重复问题 方法: 初始化 >>> s1 = set()>>> print(type(s ...

  3. python函数基础学习

    函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...

  4. 10分钟学会Python函数基础知识

    看完本文大概需要8分钟,看完后,仔细看下代码,认真回一下,函数基本知识就OK了.最好还是把代码敲一下. 一.函数基础 简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运 ...

  5. Python函数基础和函数参数

    函数的定义和函数的调用 return的作用 三种参数的定义 常用的内置函数 len() 函数基础 函数的定义 def 函数名(参数): pass return 表达式 pass在这里表示什么都没有,不 ...

  6. python 函数基础介绍

    函数是对程序逻辑进行结构化或过程化的一种编程方法.能将整块代码巧妙地隔离成易于管理的小块,把重复代码放在函数中而不是进行大量的拷贝. 一.函数创建 def 函数创建格式如下: def function ...

  7. Python函数基础学习(定义、函数参数、递归函数)

    1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: ut ...

  8. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  9. 4.python函数基础

    一.函数 1.函数简介 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但 ...

随机推荐

  1. 千呼万唤岂出来,写款软件不容易——Visual Entity 2.0 发布

    在各位用户不继的催更中,终于完成了这次更新.Visual Entity这个软件发布于 2011年,这个软件完成后,便上班去了,也没有做什么推广工作.所以知道的用户并不多,尽管它是个非常好用.并且免费的 ...

  2. RabbitHub开源情况及计划

    之前写过一篇".NET 平台下的插件化开发内核(Rabbit Kernel)",已经过去三个月了,期间RabbitHub并不是没有了发展更不是放弃了发展,在RabbitHub中的群 ...

  3. SublimeText3下的Python开发环境配置

    最近重装了机器,需要重新安装Python的开发环境,中间遇到了几个问题,特些记录一下,以防下次备忘. 从Python的网站下载安装Python,这个非常简单,没有什么值得说的,大家可以参考廖雪峰的这个 ...

  4. DBVisualizer 6.0.2配置

    DBVis是一款通过JDBC连接数据库的软件,理论上,可以连接任何数据库,今天,我们以DBVisualizer6.0.2免费版为例 (一)连接MySql5 1.解压压缩包至本地某路径下 2.配置环境变 ...

  5. CentOS6.6搭建LNMP环境

    CentOS6.6搭建LNMP环境 1.设置yum源,本地安装依赖包 1 yum -y install gcc gcc-c++ automake autoconf libtool make 2.下载依 ...

  6. android第三方框架 xlistview 的使用

    如今上拉刷新,下拉加载更多已经是浩如烟海的app的标配了 最近正好有相关的需要就去学习了一下,还是那句老话凡事都靠自己来 搞实在不是一件好事,费时费力不说可能还是在做无用功,不过自己研究学习 还是很有 ...

  7. PHP之function_handling 函数

    function_handling 函数 function_handling 函数 需求: 编写一个函数,传入的参数个数不确定,请求出其和. 使用到 以下几个函数: 代码说明: 函数的参数可以是另外一 ...

  8. Shell脚本_启动停止重启sh脚本

    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 3 ...

  9. 【CodeVS 3289】【NOIP 2013】花匠

    http://codevs.cn/problem/3289/ dp转移,树状数组维护前缀max和后缀max进行优化,$O(nlogn)$. #include<cstdio> #includ ...

  10. 【POJ 1113】Wall

    http://poj.org/problem?id=1113 夏令营讲课时的求凸包例题,据说是PKUSC2015的一道题 我WA两次错在四舍五入上了(=゚ω゚)ノ #include<cmath& ...