Python入门学习(二)——函数篇

1.函数

要调用一个函数,需要知道函数的名称和参数。

可以查看Python标准库:https://docs.python.org/2/library/index.html,也可以在交互式命令行通过 help(abs) 查看函数的帮助信息。

s = area_of_circle(x)  #圆的面积
s = abs(-1.5)          #绝对值函数
cmp(x, y)              #比较函数,如果x<y,返回-1,如果x=y,返回 0,如果 x>y,返回1
int(‘123‘)             #把其他数据类型转换为整数,即123
str(123)               #把其他类型转换成 str,即‘123‘

调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个:

>>> abs(1, 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)

如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:

>>> abs(‘a‘)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: bad operand type for abs(): ‘str‘

2.编写函数

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

函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。

如果没有return语句,函数执行完毕后也会返回结果,只是结果为 None。

#定义一个 square_of_sum函数,它接受一个list,返回list中每个元素平方的和
def square_of_sum(L):
    sum = 0
    for num in L:
        sum+=num*num
    return sum

print square_of_sum([1, 2, 3, 4, 5])
print square_of_sum([-5, 0, 5, 15, 25])

3.函数返回多值

Python的函数返回多值其实就是返回一个tuple。

# -*- coding: utf-8 -*-
import math    #import引用math包

def quadratic_equation(a, b, c):           #计算一元二次方程的两个解。
    deta = b*b-4*a*c
    if deta>=0:
        x1 = (-1*b+math.sqrt(deta))/(2*a)   #平方根函数
        x2 = (-1*b-math.sqrt(deta))/(2*a)
        return x1,x2
    else:
        return

print quadratic_equation(2, 3, 0)
print quadratic_equation(1, -6, 5)

4.递归函数

def fact(n):       #计算n的阶乘
    if n==1:
        return 1
    return n * fact(n - 1)

使用递归函数需要注意防止栈溢出。在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。

汉诺塔问题

我们对柱子编号为a, b, c,将所有圆盘从a移到c可以描述为:

1)如果a只有一个圆盘,可以直接移动到c;

2)如果a有N个圆盘,可以看成a有1个圆盘(底盘) + (N-1)个圆盘,首先需要把 (N-1) 个圆盘移动到 b,然后,将a的最后一个圆盘移动到c,再将b的(N-1)个圆盘移动到c。

#-*- coding:utf-8 -*-
def move(n, a, b, c):        # move(n, a, b, c)表示的是有n个盘子在a柱子上,将要移到c柱子上面去
    if n == 1:               # 如果a柱子上面只有一个盘子,则直接移到c柱子上面去并输出路径,结束递归
        print a, ‘-->‘, c
        return
    move(n-1, a, c, b)       # 将n-1的盘子从a柱子上面移到b柱子上面去
    print a, ‘-->‘, c        # 输出最下面个盘子移从a移到c的路径
    move(n-1, b, a, c)       # 将b柱子上面的n-1个盘子移动到c柱子上面
move(4, ‘A‘, ‘B‘, ‘C‘)

5.默认参数

由于函数的参数按从左到右的顺序匹配,所以默认参数只能定义在必需参数的后面:

当定义默认参数后,函数调用既可以只传递默认参数,也可以传递所有参数。

def greet(name=‘world‘):
    print  ‘Hello,‘,name,‘.‘
greet()          #打印Hello, world .
greet(‘Bart‘)    #打印Hello, Bart .

6.定义可变参数

如果想让一个函数能接受任意个参数,则可定义一个可变参数。

def fn(*args):
    print args

可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数。

这多个参数实际被组装成了一个tuple。

def average(*args):    #计算平均值
    if len(args)>0:
        sum=0
        for num in args:
            sum+=num
        avg=float(sum)/len(args)
        return avg
    else:
        return 0.0

print average()
print average(1, 2)
print average(1, 2, 2, 3, 4)

原文地址:https://www.cnblogs.com/sapphire77/p/10697806.html

时间: 2024-10-29 10:46:24

Python入门学习(二)——函数篇的相关文章

python入门学习之变量篇

[前言] 在公司内部wiki上看到一个不错的学习网站,遂开始了我这慢悠悠的学习之旅. 网站链接:https://www.codecademy.com 1.理解布尔值 一种数据类型. 简单来说,正如你家里的电灯有开关两种状态一样,布尔值 同样也有两个值,即为True和False. 你可以使用变量来存储布尔数据. a = True  b = False 2.实战 以下为网站给出的任务: Set the following variables to the corresponding values:

python入门学习:7.函数

python入门学习:7.函数 关键点:函数 7.1 定义函数7.2 传递实参7.3 返回值7.4 传递列表7.5 传递任意数量的实参7.6 将函数存储在模块中 7.1 定义函数 ??使用关键字def告诉python要定义一个函数,紧接着跟着函数名,冒号.后面的缩进构成函数体.例如: 1def func_name():2    函数体34def greet_user():5    """显示简单问候语"""6    print("hel

angularjs入门学习【指令篇】

一.首先我们来了解下指令API 属性 含义 restrict 申明标识符在模版中作为元素,属性,类,注释或组合,如何使用 priority 设置模版中相对于其他标识符的执行顺序 Template 指定一个字符串式的内嵌模版,如果你指定了模版是一个URL,那么是不会使用的 tempateUrl 指定URL加载的模版,如果你已经指定了内嵌的模版字符串,那么它不会使用的 Replace 如果为真,替换当前元素,如果是假或未指定,拼接到当前元素 Transclude 移动一个标识符的原始字节带你到一个新

MongoDB入门学习(二):MongoDB的基本概念和数据类型

上一篇讲了MongoDB的安装和管理,其中涉及到了一些概念,数据结构还有一些API的调用,不知道的没关系,其实很简单,这篇会简单介绍一下. 1.文档 文档是MongoDB的核心概念,多个键值对有序的放在一起就是一个文档,文档是MongoDB存储数据最基本的数据结构.对MongoDB都是以文档的形式来操作的,使用了一种类似JSON的二进制BSON数据格式,对API的调用都是传的文档参数.每种编程语言都有标示文档的数据结构,比如java的map,lua的table,python的dict等等,但是都

Objective C 快速入门学习二

Objective-C 类.对象.方法 1.编写一个复数类: #import <Foundation/Foundation.h>@interface Complex: NSObject //类声明,Complex继承NSObject { int iReal;//成员变量声明,在括号内 int iImag; } //成员函数声明,在括号外 -(void) print; -(void) setReal : (int) n; -(void)setImag : (int) d; @end //@int

SpringMVC入门学习(二)

SpringMVC入门学习(二) ssm框架 springMVC 在上一篇博客中,我简单介绍了一下SpringMVC的环境配置,和简单的使用,今天我们将进一步的学习下Springmvc的操作. model.addAttribute()的使用 model接口的源代码: 由图可知,在addAttribute()中有两种入参方式,一种是指明名字var1,一种是不指明名字var1.在不指明名字中,会通过相近的去寻找. 在addAttribute()中,我们可以放任何对象: 首先先导入jsp标签maven

Python入门学习:1.变量和简单的数据类型

python入门学习:1.变量和简单的数据类型 关键点:变量.字符串.数字 1.1 变量的命名和使用1.2 字符串1.3 数字1.4 注释 1.1 变量的命名和使用 ??变量,顾名思义是一个可变的量,每个变量都存储一个值--与变量关联的信息. 1message = "hello world!"2# message 是一个变量3print(message) ??在python中使用变量时,需要遵循一些规则和指南. 变量名只能包含字母.数字和下划线.变量名可以字母或者下划线打头,但不能以数

python入门学习:8.类

python入门学习:8.类 关键点:类 8.1 创建和使用类8.2 使用类和实例8.3 继承8.4 导入类 8.1 创建和使用类 ??面向对象编程是最有效的软件编写方法之一.在面向对象编程中,你编写表示现实世界中的事物和情景的类,并基于这些类来创建对象.根据类来创建对象被称为实例化,这让你能够使用类.8.1.1 创建dog类??下面创建一个dog类: 1calss Dog(): 2 3    def __init__(self,name,age): 4        self.name = n

Python入门学习:一步步教你怎么用Python写贪吃蛇游戏

前几天,有人提到贪吃蛇,一下子就勾起了我的兴趣,毕竟在那个Nokia称霸的年代,这款游戏可是经典中的经典啊!而用Python(蛇)玩Snake(贪吃蛇),再合适不过了. 这里通过一个Python入门学习的例子跟大家详细讲解一下! 先通过下面这个效果图来感受下吧! 1 环境 操作系统:Windows Python版本:3.7.3 2 需求分析 我们先来回顾下贪吃蛇中的游戏元素及游戏规则. 首先呢,需要有贪吃蛇.有食物:需要能控制贪吃蛇来上下移动获取食物:贪吃蛇在吃取食物后,自身长度增加,同时食物消

DataVeryLite入门教程(二) Entity篇

DataVeryLite 是基于.net 4.0的数据库持久化ORM框架. 目前支持的数据库有Sqlserver,Mysql,Oracle,Db2,PostgreSql,Sqlite和Access. 最好先阅读DataVeryLite入门教程(一) 配置篇,然后再阅读本篇.如果你觉得麻烦也可以跳过. Entity是ORM中的核心对象之一,一个继承Entity的对象对应于数据库中的一个表. Entity提供丰富的API对表中的单条数据进行操作. 比如根据id或其他条件,加载,删除,插入,更新和部分