Python3快速入门(五)——Python3函数

Python3快速入门(五)——Python3函数

一、函数定义

1、函数定义

Python 定义函数使用 def 关键字,一般格式如下:

def function_name(parameter_list):
    pass

默认情况下,参数值和参数名称按函数声明中定义的顺序进行匹配。
函数代码块以?def?关键词开头,后接函数标识符名称和圆括号?()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串描述函数说明。
函数内容以冒号起始,并且进行缩进。
函数的定义示例如下:

def add(x, y):
    result = x + y
    return result

2、函数的返回值

函数使用return [表达式]?结束函数,返回一个或多个值给调用方。不带表达式的return相当于返回 None。

def get_fruits():
    apple = "Apple"
    banana = "Banana"
    orange = "Orange"
    return apple, banana, orange

a,b,c = get_fruits()
print(a, b, c)

二、函数调用

1、函数调用

函数定义只给了函数一个名称,指定了函数里包含的参数和代码块结构。
函数调用直接使用定义的函数名称以及传递相应的参数进行调用。

2、函数调用的递归限制

Python默认设置了函数的最大递归调用次数,开发者可以直接进行设置。设置方法如下:

#!/usr/bin/python3

import sys

sys.setrecursionlimit(100) # 设置最大递归次数为100

三、函数参数

1、必须参数

必须参数是函数调用时必须传递的参数。

#!/usr/bin/python3

def add(x, y):
    result = x + y
    return result

add(3, 2)

2、关键字参数

关键字参数用于函数调用时,使用形式参数关键字将实际参数赋值给函数的相应形式参数,函数调用过程中传递实际参数顺序可以与形式参数顺序不匹配,但所有的必须参数必须被赋值。

#!/usr/bin/python3

def add(x, y):
    result = x + y
    return result

add(y=2, x=3)

上述代码中,add函数的调用传递的实际参数通过指定关键字参数实际指定相应的形式参数,不必按照形式参数顺序匹配,但必须参数都必须被传递。

3、默认参数

函数在定义过程中可以为指定参数默认的值,并且必须参数必须放在默认参数的左侧。

#!/usr/bin/python3

def print_student(name, gender="男", age=28):
    print(name)
    print(gender)
    print(age)

print_student("Bauer", "男", 30)
print_student("Lee")
print_student("Lisa","女")

print_student(age=30, name="Bob")

函数调用时,可以使用关键字参数对形式参数进行赋值,默认参数可以缺省,但必须参数必须被赋值,必须参数可以使用关键字参数赋值。如果必须参数不使用关键字参数,则必须参数必须严格按照函数定义的顺序传递,其默认参数可以使用关键字参数选择性赋值,没有使用关键字参数传递的默认参数将使用默认值。

4、可变参数

可变参数通过使用*修饰形式参数定义可变参数。
函数定义时,可以定义可变参数,在函数调用时传递可变的多个实际参数。

#!/usr/bin/python3

def add(*args):
    result = 0;
    for x in args:
        result += x
    return result

c = add(1, 2, 3, 4)
print(c)
c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
print(c)
tup1 = 1, 2, 3, 4
c = add(*tup1) # 传入序列
print(c)
list1 = [1, 2, 3]
c = add(*list1)
print(c)

对应定义了可变参数的的函数,如果需要传入序列作为实际参数,需要在序列前加*
如果函数定义时有可变参数和默认参数,函数调用时可以使用关键字参数用于指定默认参数。

#!/usr/bin/python3

def add(x, *args, y=100):
    result = x + y;
    for i in args:
        result += i
    return result

c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) # 155
print(c)
c = add(1, 2, 3, 4, 5, 6, 7, 8, 9, y=10) # 55
print(c)

Python中,如果函数定义时可变参数放在默认参数的左侧,则默认参数需要使用关键字参数显式指定。

5、关键字可变参数

关键字可变参数通过使用**修饰形式参数定义,关键字可变参数为字典类型,关键字可变参数属于可选参数。

#!/usr/bin/python3

def average_score(**args):
    result = 0;
    for key, value in args.items():
        result += value
        print(key + ": ", value)
    result = result / len(args)
    print("Average score is ", result)
    return result

book = {"Bauer": 90, "Bob": 100, "Lisa": 70, "Lee": 100}
average_score(**book)
average_score(Bauer=100, Lisa=70, Lee=100)

函数调用时,关键字可变参数可以传递多个键值对,页可以直接传递dictionary类型变量,此时需要使用**修饰字典变量。

四、匿名函数

python 使用 lambda表达式来创建匿名函数,函数定义如下:
lambda [arg1 [,arg2,.....argn]]:expression
Lambda表达式定义的匿名函数的函数体不是一个代码块,因此,仅能在lambda表达式中封装有限的逻辑。
Lambda表达式拥有自己的命名空间,且不能访问自有参数列表外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

sum = lambda arg1, arg2: arg1 + arg2;

# 调用sum函数
print(sum(10, 20))
print(sum(20, 20))

五、变量作用域

程序的所有的变量并不是在任何位置都可以访问的,访问权限决定于变量是在哪里赋值的。变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。
定义在函数内部的变量拥有局部作用域,定义在函数外的拥有全局作用域,代码块内部局部变量会覆盖全局变量,在局部作用域内修改全局变量的值时,需要使用global关键字对相应全局变量进行声明,表明本作用域内使用的是全局变量。
局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

#!/usr/bin/python3
# -*- coding:utf-8 -*-

base = 100

def sum(*args):
    global base
    base = 0
    result = 0;
    for i in args:
        result += i
    return result + base;

c = sum(1,2,3,4,5,6,7,8,9,10)
print(c) # 55
print(base) # 0

原文地址:https://blog.51cto.com/9291927/2409671

时间: 2024-10-12 16:27:21

Python3快速入门(五)——Python3函数的相关文章

Python3快速入门(十五)——Pandas数据处理

Python3快速入门(十五)--Pandas数据处理 一.函数应用 1.函数应用简介 如果要将自定义函数或其它库函数应用于Pandas对象,有三种使用方式.pipe()将函数用于表格,apply()将函数用于行或列,applymap()将函数用于元素. 2.表格函数应用 可以通过将函数对象和参数作为pipe函数的参数来执行自定义操作,会对整个DataFrame执行操作. # -*- coding=utf-8 -*- import pandas as pd import numpy as np

Python3快速入门(六)——Python3面向对象

Python3快速入门(六)--Python3面向对象 一.面向对象技术简介 1.面向对象简介 面向对象编程(Object Oriented Programing,OOP)是一种编程思想,OOP把对象当成程序的一个基本单元,一个对象包含数据和操作数据的方法.面向对象编程的三大特性如下:A.封装,可以隐藏实现细节,使代码模块化.B.继承,可以通过扩展已存在的类来实现代码重用,避免重复编写相同的代码.C.多态,封装和继承的目的都是为了实现代码重用, 而多态是为了实现接口重用,使得类在继承和派生的时候

Python3快速入门

Python3快速入门Python3快速入门(一)--Python简介https://blog.51cto.com/9291927/2385592Python3快速入门(二)--Python3基础https://blog.51cto.com/9291927/2409575Python3快速入门(三)--Python3标准数据类型https://blog.51cto.com/9291927/2409580Python3快速入门(四)--Python包管理https://blog.51cto.com

Python3快速入门(九)——Python3并发编程

Python3快速入门(九)--Python3并发编程 一.Python线程模块 1.线程简介 一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程本身不拥有系统资源,与进程内的其它线程共享进程的所有资源.一个进程中至少有一个线程,并作为程序的入口,即主线程,其它线程称为工作线程.???? 多线程,是指从软件或者硬件上实现多个线程并发执行的技术.支持多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,进而提升

Python3快速入门(十二)——NumPy

Python3快速入门(十二)--NumPy 一.NumPy简介 1.NumPy简介 NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时对数组运算提供了大量的数学函数库.Numpy 是一个运行速度非常快的数学库,内部解除了CPython的GIL(全局解释器锁),运行效率极好,主要用于数组计算,是大量机器学习框架的基础库,NumPy主要包括如下:(1)强大的N维数组对象 ndarray(2)广播功能函数(3)整合 C/C++/

Python3快速入门(十七)——Python扩展模块开发

Python3快速入门(十七)--Python扩展模块开发 一.Python扩展模块 1.Python扩展模块简介 Python与C/C++交互的方案有多种,如Python C API,SWIG,SIP,ctypes,cpython,cffi,boost.python等.Python只是一个语言规范,有很多具体实现,CPython是标准Python,由C编写,Python脚本被编译成CPython字节码,然后由虚拟机解释执行,垃圾回收使用引用计数,Python与C/C++混合编程本质是基于CPy

Python3快速入门(八)——Python3 JSON

Python3快速入门(八)--Python3 JSON 1.JSON简介 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,是基于ECMAScript的一个子集. 2.json模块简介 Python3 中可以使用 json 模块来对 JSON 数据进行编解码,包含两个函数:json.dumps():?对数据进行编码.json.loads():?对数据进行解码.在json的编解码过程中,Python 的数据类型与json类型会相互转换.json.du

Python3快速入门(七)——Python3正则表达式

Python3快速入门(七)--Python3正则表达式 1.re模块简介 re 模块提供 Perl 风格的正则表达式模式,使 Python 语言拥有全部的正则表达式功能. 2.正则表达式模式 模式字符串使用特殊的语法来表示一个正则表达式:正则表达式模式中的字母和数字匹配同样的字符串:多数字母和数字前加一个反斜杠时会有不同的含义:标点符号通常有特殊的含义,只有被转义时才匹配自身:反斜杠本身需要使用反斜杠转义.^匹配字符串的开头$匹配字符串的末尾.匹配任意字符,除了换行符,当re.DOTALL标记

Python3快速入门(十)——Python3网络编程

Python3快速入门(十)--Python3网络编程 一.socket模块简介 Python 提供了两个级别访问的网络服务,低级别的网络服务支持基本的 Socket,提供了标准的BSD Sockets API,可以访问底层操作系统Socket接口的全部方法:高级别的网络服务模块 SocketServer, 提供了服务器中心类,可以简化网络服务器的开发.socket不支持多并发,socketserver是对socket的再封装,简化网络服务器版的开发. 二.socket模块接口 1.socket