第一节:调用函数

1.函数是什么?

  函数是组织好的,可以重复利用的。

2.为什么要用到函数?

  提高应用的模块性,提高重复利用率。指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个。

3.py中怎么用?

  函数是代码抽象的一种方式,只有把底层的抽象成用户一看便知,才能达到高级语言的层次。所以,函数就是一种抽象。就是说:用户一看便知该函数会实现什么样的功能。

4.函数的分类:

  内函数:语言自己内置的一些函数;比如:abs();max();min();

  外函数:用户子自己定义的函数

注解:如果把一个函数赋给一个变量,那么这个变量就有了这个函数的功能。举例:a = abs;a(-1);

5.数据类型转换

  int();float();str();bool()

小结:调动Python函数的时候,要根据函数的定义,传入正确的参数,如果函数调用出错,要学会看错误信息。

第二节:定义函数

1.语法:在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

2.举例:

求绝对值函数
def my_abs(x):
if x >= 0:
print(x)
else:
print(-x) my_abs(-2)

3.空函数:什么也不做的函数,叫做空函数,用pass来实现

举例:

def  nop():
pass  

举例:

age = 8
if age>=18:
pass#代码块可以先占用着,等需要写的时候在写上即可  

举例:

def my_abs(x):
if not isinstance(x,(int,float)):
raise TypeError('bad operand type')
if x >= 0:
print(x)
else:
print(-x)
my_abs('w')

4.函数返回多个值

举例:

import math
def move(x,y,step,angele = 0):
nx = x + step*math.cos(angele)
ny = y + step*math.sin(angele)
print(nx,ny) move(100,100,60,math.pi/6)

注解:python函数返回多个值的时候返回的是一个tuple。  

小结:

  定义函数时,需要确定函数名和参数个数;

  如果有必要,可以先对参数的数据类型做检查;

  函数体内部可以用return随时返回函数结果;

  函数执行完毕也没有return语句时,自动return None

  函数可以同时返回多个值,但其实就是一个tuple。

举例:

请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程,ax2 + bx + c = 0的两个解。

import math
def quadratic(a, b, c):
x1 = (-b + math.sqrt(b*b-4*a*c))/2*a
x2 = (-b + math.sqrt(b*b-4*a*c))/2*a
print(x1,x2)
quadratic(1,-1,0) 

以上考虑的因素太少,更标准的写法:

import math
def quadratic(a,b,c):
if(a==0):
print('参数错误,请重新输入')
else:
delta = b*b -4*a*c
if(delta > 0):
x1 = (-b + math.sqrt(b * b - 4 * a * c)) / 2 * a
x2 = (-b - math.sqrt(b * b - 4 * a * c)) / 2 * a
print('该方程有两个不同的实根:x1 = %s x2 = %s' % (x1,x2)) elif(delta == 0):
x1 = -b/2*a
x2 = -b/2*a
print('该方程有两个相同的实根:x1=x2=%s' % (x1,x2))
else:
print('该方程没有实根')
quadratic(1,2,1)  

小结:函数就是把具体的功能给封装起来,然后使用者直接调用即可,不用知道函数中的细枝末节。

第三节:函数的参数

  位置参数:

def power(x):
print(x*x)
power(2)

  更具体一些的位置参数:

def power(x,n):
s = 1
while n >0:#产生循环
n = n-1#修改n的值
s = s * x#只要符合条件就执行本条语句
print(s)#当循环执行完后就执行这条语句
power(2,3)  

注解:位置参数有位置限制,顺序不可颠倒。

  默认参数:

  举例:

def power(x,n=2):#可以给默认参数一个默认的值
s = 1
while n >0:#产生循环
n = n-1#修改n的值
s = s * x#只要符合条件就执行本条语句
print(s)#当循环执行完后就执行这条语句
power(4)

 设置默认参数时的注意事项:

1.必选参数在前,默认参数在后。

2.如何设置默认参数:当函数有多个默认参数时,把变化大的参数放前面,变化小的参数放后面,变化小的参数可以作为默认参数。

3.使用默认参数的优势:降低调用函数的难度。 

注意:默认参数必须指向不变对象!

注意:为什么要设计strNone这样的不变对象呢?

  因为不变对象一旦创建,对象内部的数据就不能修改,这样就减少了由于修改数据导致的错误。此外,由于对象不变,多任务环境下同时读取对象不需要加锁,同时读一点问题都没有。我们在编写程序时,如果可以设计一个不变对象,那就尽量设计成不变对象。    

  可变参数:

  定义:传入的参数是可以变化的,可以是1个,2个...............还可以是0个

  举例:

def calc(*numbers):#可变参数
sum = 0
for x in numbers:
sum = sum+ x*x
print(sum)
nums = (1,2,3)
calc(*nums)

  关键字参数:

  举例:

def person(name,age,**kw):
print('name:',name,'age:',age,'other:',kw)
person('李XX',23,city = 'shanghai',sex = '男')

  注解:**kw将是一个字典dict

  命名关键字参数:主要用来限制参数中的名字。

  举例:

def person(name,age,*,ciyt,job):
print(name,age,ciyt,job)
person('xxx',34,ciyt='chaoyang',job= 'eng')  

注解:

1.和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符**后面的参数被视为命名关键字参数。

2.如果函数定义中已经有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了:

3.使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数:

  参数组合:

  1.在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

小结:

  ython的函数具有非常灵活的参数形态,既可以实现简单的调用,又可以传入非常复杂的参数。

  默认参数一定要用不可变对象,如果是可变对象,程序运行时会有逻辑错误!

  要注意定义可变参数和关键字参数的语法:

  *args是可变参数,args接收的是一个tuple;

  **kw是关键字参数,kw接收的是一个dict。

  以及调用函数时如何传入可变参数和关键字参数的语法:

  可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,再通过*args传入:func(*(1, 2, 3))

  关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,再通过**kw传入:func(**{'a': 1, 'b': 2})

  使用*args**kw是Python的习惯写法,当然也可以用其他参数名,但最好使用习惯用法。

  命名的关键字参数是为了限制调用者可以传入的参数名,同时可以提供默认值。

  定义命名的关键字参数在没有可变参数的情况下不要忘了写分隔符*,否则定义的将是位置参数。

第四节:递归函数

第二章----python函数的更多相关文章

  1. [Python笔记][第二章Python序列-tuple,dict,set]

    2016/1/27学习内容 第二章 Python序列-tuple tuple创建的tips a_tuple=('a',),要这样创建,而不是a_tuple=('a'),后者是一个创建了一个字符 tup ...

  2. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  3. [Python笔记][第二章Python序列-复杂的数据结构]

    2016/1/27学习内容 第二章 Python序列-复杂的数据结构 堆 import heapq #添加元素进堆 heapq.heappush(heap,n) #小根堆堆顶 heapq.heappo ...

  4. [python笔记][第二章Python序列-list]

    2016/1/27学习内容 第二章 Python序列-list list常用操作 list.append(x) list.extend(L) list.insert(index,x) list.rem ...

  5. 第二章Python入门

    第二章 Python入门 2.1.简介 Python是著名的"龟叔"(Guido van Rossum)在1989年圣诞节期间,为了打发无聊的圣诞节而编写的一个编程语言 Pytho ...

  6. 第二章 python基础(一)

    第一节 Python文件类型 源代码 Python源代码的文件以“py”为扩展名,由Python程序解释,不需要编译 字节代码 Python源文件经编译后生成的扩展名为“pyc”的文件 编译方法 im ...

  7. 算法导论 第一章and第二章(python)

    算法导论 第一章 算法     输入--(算法)-->输出   解决的问题     识别DNA(排序,最长公共子序列,) # 确定一部分用法     互联网快速访问索引     电子商务(数值算 ...

  8. CSAPP第二章show_bytes函数的探究

    CSAPP第二章中给出了一个帮助我们观察数据的位模式的函数--show_bytes函数,具体实现如下: #include<stdio.h> typedef unsigned char *b ...

  9. 第二章 python基础(二)

    第九节 函数 函数就是完成特定功能的一个语句组,这组语句可以作为一个单位使用,并且给它取一个名字. 可以通过函数名在程序的不同地方多次执行(这通常叫做函数调用),却不需要在所有地方都重复编写这些语句. ...

随机推荐

  1. 爬虫扒下 bilibili 视频信息

    B站算是对爬虫非常非常友好的网站啦! 修改转载已取得腾讯云授权 在以上两篇文章中我们已经在腾讯云服务器上搭建好了 Python 爬虫环境了,下一步就是在云服务器上爬上我们的爬虫,抓取我们想要的数据: ...

  2. 两列布局(浮动、定位、flex)和三列布局(圣杯、双飞翼、flex)

    demo 各种布局演示 https://jsfiddle.net/mayufo/qp890peq/1/ 两栏布局 浮动 <div class="box1"> <d ...

  3. vue - check-version

    描述:check-versions.js,vue-cli中检查版本的js文件 使用:

  4. 几个opengl立方体绘制案例

    VC6 下载 http://blog.csdn.net/bcbobo21cn/article/details/44200205 opengl环境配置 http://blog.csdn.net/bcbo ...

  5. C++常考面试题汇总(持续更新中)

    c++面试题 一 用简洁的语言描述 c++ 在 c 语言的基础上开发的一种面向对象编程的语言: 应用广泛: 支持多种编程范式,面向对象编程,泛型编程,和过程化编程:广泛应用于系统开发,引擎开发:支持类 ...

  6. YII用户注冊和用户登录(五)之进行session和cookie分析 ,并在前后区分session和cookie

    5 进行session和cookie分析 ,并在前后区分session和cookie: 记住登录状态 这样下次再登录站点的时候.就不用反复输入username和password. 是浏览器的cooki ...

  7. 架构师-盛大许式伟VS金山张宴

    许式伟:作为系统架构师,您一般会从哪些方面来保证网站的高可用性(降低故障时间)? 张宴:很多因素都会导致网站发生故障,从而影响网站的高可用性,比如服务器硬件故障.软件系统故障.IDC机房故障.程序上线 ...

  8. spring揭秘读书笔记----spring的ioc容器之BeanFactory

    spring的ioc容器是一种特殊的Ioc Service Provider(ioc服务提供者),如果把普通的ioc容器认为是工厂模式(其实很相似),那spring的ioc容器只是让这个工厂的功能更强 ...

  9. tomcat的安装、配置

    简单介绍 Tomcat server是一个免费的开放源码的Web 应用server,属于轻量级应用server, 在中小型系统和并发訪问用户不是非常多的场合下被普遍使用,是开发和调试JSP 程序的首选 ...

  10. ASP.NET MVC4空MVC项目添加脚本压缩和合并

    本文介绍的是 建立的空MVC项目如何添加该功能 1.选中MVC项目,右键>"管理解决反感的NuGet程序包" 2.在"联机"中在线搜索搜索"Op ...