返回顶部
首页 > 资讯 > 后端开发 > Python >Python入门-函数
  • 305
分享到

Python入门-函数

函数入门Python 2023-01-31 08:01:21 305人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

< 返回索引页 函数 函数定义 返回值 函数的调用 函数的参数 顺序参数 参数的默认值 可变参数 关键字参数 参数的组合 参数的专递 函数作用域 内建函数 匿名函数 函数注解 总结 练习 参考 <!

< 返回索引

  • 函数

    • 函数定义

      • 返回值
      • 函数的调用
    • 函数的参数

      • 顺序参数
      • 参数的默认值
      • 可变参数
      • 关键字参数
      • 参数的组合
      • 参数的专递
    • 函数作用域
    • 内建函数
    • 匿名函数
    • 函数注解
  • 总结
  • 练习
  • 参考

<!-- /TOC -->

函数

在维基百科上函数式这样描述的:

函数在数学中为两集合间的一种对应关系:输入值集合中的每项元素皆能对应唯一一项输出值集合中的元素。

此处的函数区别于我们数学上的函数,在编程世界中,函数(Functions)是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你
通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是所谓的调用函数。我们已经使用过了许多内置的函数,例如 lenrange

基本结构如下:

def 函数名(参数列表):
    " 函数说明 "
    函数体

函数定义

python中,使用关键字def来定义一个函数。结构如下:

def hello(name):  
    " 返回字符串"
    return name
    
def hello2():
    pass 

语法说明:

  • 函数的参数支持多种形式
  • 函数说明,可通过内部方法hello.__doc__ 获取
  • 函数的返回值支持返回多个
  • 我们可以使用 pass 来定义个空函数

下面来展开一一讲述。

返回值

函数中返回值,使用关键字return 来表示,返回值可以是任意类型,当没有return语句时函数返回None。函数返回值支持多个,返回多个时,使用逗号分隔。如下:

def say_hello(name):
    print(name)
    return 'Hello, %s' % name, name

函数的调用

函数的调用,上边我们已经使用了很多次了,函数名加上需要传入的响应参数即可。这里需要注意的是,在Python中,一切结尾对象,当然函数也是对象。函数名也可以作为参数传递到函数中使用。

def say_hello(name):
    print('hello, %s' % name)

def wapper(fun):
    print('调用之前做一些事')
    fun('Dean')
    print('调用之后做一些事')

wapper(say_hello)
"""
调用之前做一些事
hello, Dean
调用之后做一些事
"""

函数的参数

在程序设计中函数参数有2个比较通用的概念,形参和实参,在各高级语言中都会有。形参,即形式上的参数,不占用内存空间。实参,是实际真正的参数。

看下面这个实例:

def say_hello(name):  
    print('hello, %s' % name )
say_hello('Dean')

其中,函数参数name即为函数的形参。我们调用函数时,传入的参数Dean便是实参。在Python编程时,这个概念并不是那么重要,此种了解即可。

顺序参数

在Python 函数中,多个参数按照一定的顺序依次传入函数,其值依次对应赋给函数声明时参数,这种参数叫顺序参数

def say_hello(name, age):
    print('hello, %s' % name)
    print('you age: %s ' % age)

say_hello('Dean', 30)

如上,Dean与30 这2个参数按照由左到右依次赋值给形参nameage供函数内部使用。需要注意的是,顺序参数中,形参和实参的个数需要一直,否则函数会报调用错误。

参数的默认值

在函数声明时,可以给参数设置默认值,如下:

def say_hello(name='Tim', age=20):
    print('hello, %s' % name)
    print('you age: %s ' % age)

say_hello('Dean', 30)
say_hello('Dean')

当函数参数设置默认值后,该参数在调用函数时,可以省略,省略时则会使用默认值。有此可以退出,参数没有设置默认值,则是必传的。

可变参数

有时候我们在声明函数时,没法确定函数的参数个数,或者我们本身就想设计一种动态的参数,这种设计是否可以满足呢?Python的函数对这种情况已做了考虑,提供了可变参数来满足这种需求。

def say_hello(*args):
    print(args)
    for name in args:
        print('hello, %s' % name)

say_hello('Dean','Tim')
('Dean', 'Tim')
hello, Dean
hello, Tim

可变参数使用*加一个形参来表示,其值为一个元组类型,元组内的元素为我们传入的实参。

关键字参数

在可变参数中,我们传入函数的参数只能按顺序或着通过下标来获取,那么可不可以给参数起一个名字呢,答案是可以的。Python 为这种情况提供了一种参数形式,叫做关键字参数

def say_hello(**kwargs):
        print('hello, %s' % kwargs['name'])
        print('you age: %s' % kwargs['age'])

say_hello(name='Dean', age=30)

使用**加一个形参来表示,其值为一个字典,key为我们实参中传入的变量,value值为实参中的变量的值。

参数的组合

Python 函数中,以上参数可组合使用。当参数组合使用时,需要注意以下原则:

  • 有默认值的参数需要放在无默认值参数的后边
  • 当顺序参数和可变参数混合使用时,可变参数的取值为超出顺序参数的实参部分,且可变参数在顺序参数之后。
  • args 和 *kwargs 是 Python 的惯用写法,变量名可以更换。

参数的常用排列顺序为,无默认值顺序参数、有默认值顺序参数、可变参数、关键字参数。

def say_hello(name, age=30, *args, **kwargs):
    print(args)
    print(kwargs)

    print('hello, %s' % name)
    print('you age: %s' % age)
    print('address: %s' % kwargs['address'])

say_hello('Dean', 20, address='Beijing')

参数的专递

我们在调用函数时,将实参传递给了函数的形参,供函数中逻辑代码使用。那么在这个过程中,计算机内存是一个怎么的过程呢?我们在学习变量时知道,Python中的变量是其内部存储值的一个内存地址或者叫做一个引用。在传入函数时,便是将这个引用传入了函数。那么我们在函数内部修改变量的值时,是不是就修改了外部的变量的值呢?答案是不一定。

在我们学习基本数据结构时,我们知道有可变类型(字典、列表、集合)和不可变类型(数值、字符串、元组)。当我们传入函数的参数为可变类型时,函数中的形参使用的内存地址同实参的内存地址,当改变形参的值时,实参的值也相应跟着修改了。当我们传入的为不可变量时,形参会重新分配一块内存地址保存实参传给他的值,当形参修改时,实参自然不会修改。

来看下边的例子:

# func.py 
def say_hello1(name):
    '不可变类型参数'
    name = 'Time'
    print('name: %s' % name )


def say_hello2(user_dict):
    '可变类型参数'
    user_dict['name'] ='Time'
    print('name: %s' % user_dict['name'])

name = 'Dean'
print('name before:', name)
say_hello1(name)
print('name after:', name)

user_dict = {'name':'Dean'}
print('user_dict before:', user_dict)
say_hello2(user_dict)
print('user_dict after:', user_dict)

"""
# 不可变参数,值没有变
('name before:', 'Dean')
name: Time
('name after:', 'Dean')

# 可变参数,值变了
('user_dict before:', {'name': 'Dean'})
name: Time
('user_dict after:', {'name': 'Time'})
"""

函数作用域

在第三章,我们学习变量时,知道变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。在Python中,函数会重新开启一个作用域,当在函数内部定义的变量,在函数外部是无法访问的。那么该变量便是函数的局部变量,函数外部的变量便可成为全局变量

total = 0 # 这是一个全局变量
# 可写函数说明
def sum( arg1, arg2 ):
    #返回2个参数的和.
    total = arg1 + arg2 # total在这里是局部变量.
    print ("函数内是局部变量 : ", total)
    return total

#调用sum函数
sum( 10, 20 )
print ("函数外是全局变量 : ", total)

那么当内部的局部变量想要暴露出来给外部使用时如何实现呢?Python提供了2个关键字,Gobalnonlocal

global 将变量作用域变为函数外层全局作用域。

num = 1
def fun1():
    global num  # 需要使用 global 关键字声明
    print(num) 
    num = 123
    print(num)
fun1()

nonlocal 将变量作用域变为函数外部非全局变量,及闭包(Enclosing)作用域。

def outer():
    num = 10
    def inner():
        nonlocal num   # nonlocal关键字声明
        num = 100
        print(num)
    inner()
    print(num)
outer()

内建函数

内建函数,是Python中已经定义好的函数可以在编写代码时直接使用。我们已经使用过内建函数,如lenrange 等。更多的内建函数,可参阅官方文档中函数说明。

匿名函数

匿名函数,就是不使用def来定义的函数。Python中使用关键字lambda 来实现匿名函数。

# 语法
lambda [arg1 [,arg2,.....argn]]:表达式

语法说明:

  • arg为参数,可以任意多个,使用逗号分隔
  • 表达式 为函数体,使用冒号开头
  • 表达式 的返回值即为函数的返回值

实例:

# 内名函数
sum = lambda arg1, arg2: arg1 + arg2
 
# 调用sum函数
print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 ))

函数注解

函数注解,为函数和参数增加了一些说明特性。python3.0 新增的特性,见PEP3107。可通过函数的__annotations__ 熟悉查看。

def f(ham: 42, eggs: int = 'spam') -> "Nothing to see here":
    print("Annotations:", f.__annotations__)
    print("Arguments:", ham, eggs)

f('wonderful')
'''
Annotations: {'eggs': <class 'int'>, 'return': 'Nothing to see here', 'ham': 42}
Arguments: wonderful spam
'''

def foo(a: 'x', b: 5 + 6, c: list) -> max(2, 9):
    pass 

语法说明:

  • 参数的说明在参数后边,使用冒号和参数隔离,注释为一个表达式。
  • 函数的注解在函数参数括号后,使用'->' 符号开头,也是一个表达式。

在Python的编程时,注解使用的比较少,以方便人们更多的使用docstring来说明参数及返回值,另一方面Python函数参数可进一步通过编码规范一眼就能看出什么类型。这种注释语法,反而显得啰嗦冗余。

总结

本章我们学习了函数及其使用,知识重点总结如下:

  • Python提供了许多内建函数共我们使用,内建函数可直接使用无需定义。
  • 参数组合在使用的时候是有顺序的,依次是无默认值顺序参数、有默认值顺序参数、可变参数、关键字参数。
  • args 表示可变参数,*kwargs 表示关键字参数。
  • 当参数为不可变参数时,函数不会影响外部实参值,当参数为不可变参数时,函数则会影响外部实参值。
  • 函数本身可作为参数传递。
  • Python 中使用lambda 来实现匿名函数。

练习

  • 1、求n的阶乘
def factorial(num):
    """
    求阶乘
    :param num: 非负整数
    :return: num的阶乘
    """
    result = 1
    for n in range(1, num + 1):
        result *= n
    return result

n = int(input('n = '))
factorial(n)
  • 2、实现判断一个数是不是素数的函数。
# 素数,在大于1的自然数中,除了1和它本身以外不再有其他因数
def is_prime(num):
    for factor in range(2, num):
        if num % factor == 0:
            return False
    return True if num != 1 else False

参考

  • 廖雪峰-python3教程
  • python官方文档

--结束END--

本文标题: Python入门-函数

本文链接: https://lsjlt.com/news/193016.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python入门-函数
    < 返回索引页 函数 函数定义 返回值 函数的调用 函数的参数 顺序参数 参数的默认值 可变参数 关键字参数 参数的组合 参数的专递 函数作用域 内建函数 匿名函数 函数注解 总结 练习 参考 <!...
    99+
    2023-01-31
    函数 入门 Python
  • Python 入口函数(菜鸟入门)
    最近在组内研究专项项目,其中的一个现有工具是用 Python 开发的,我的目标是对这款工具的流程进行优化。虽然可以找到对应的开发者了解现有流程,然后结合我的研究提出优化方案,最后让 TA 去编码实现。但是程序员心理使然,什么东...
    99+
    2023-01-31
    菜鸟 函数 入门
  • Python入门之三角函数atan2()函数详解
    描述 atan2() 返回给定的 X 及 Y 坐标值的反正切值。 语法 以下是 atan2() 方法的语法: import math math.atan2(y, x) 注意:atan2()是不能...
    99+
    2022-06-04
    函数 详解 入门
  • Python编程入门指南之函数
    目录Python编程:函数定义和调用函数向函数传递信息传递实参:位置实参传递实参:关键字实参传递实参:默认值传递列表禁止函数修改列表传递任意数量实参返回值返回简单值让实参可选返回字典...
    99+
    2024-04-02
  • Python入门之三角函数sin()函数实例详解
    描述 sin()返回的x弧度的正弦值。 语法 以下是sin()方法的语法: importmath math.sin(x) 注意:sin()是不能直接访问的,需要导入math模块,然后通过math静态...
    99+
    2022-06-04
    函数 详解 实例
  • Python入门之三角函数tan()函数实例详解
    描述 tan() 返回x弧度的正弦值。 语法 以下是 tan() 方法的语法: import math math.tan(x) 注意:tan()是不能直接访问的,需要导入 math 模块,然后通...
    99+
    2022-06-04
    函数 详解 实例
  • ​​​​​​​Python 入门学习之函数式编程
    目录前言把函数作为对象把对象作为函数数据结构内的函数把函数作为参数和返回值嵌套函数单表达式函数(Lambda 表达式)Map、Filter 和 ReduceMapFilterRedu...
    99+
    2024-04-02
  • 从入门到精通:Python 函数教程
    Python 是一种非常流行的编程语言,其灵活性和易读性使其成为许多开发者的首选语言。在 Python 中,函数是一种非常重要的编程概念,可以帮助我们将代码分解为可重用的部分。本文将介绍 Python 函数的基础知识和高级概念,从入门到精...
    99+
    2023-06-29
    函数 教程 关键字
  • Python入门教程(十九)python的函数详解
    目录创建函数调用函数参数默认参数值以 List 传参返回值关键字参数任意参数pass 语句递归函数是一种仅在调用时运行的代码块。 可以将数据(称为参数)传递到函数中。 函数可以把数据...
    99+
    2023-05-17
    python 函数 python函数的定义
  • Oracle分析函数入门
    Oracle分析函数入门...
    99+
    2020-12-22
    Oracle分析函数入门
  • Python入门之三角函数全解【收藏】
    Python中的三角函数位于math模块内。 引入模块: import math 输出pi: import math print(math.pi) 得:3.141592653589793 math模块内还...
    99+
    2022-06-04
    函数 入门 收藏
  • Python零基础入门(九)——函数,类和对象
    系列文章目录 个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟...
    99+
    2023-08-31
    python pycharm 人工智能 开发语言
  • python入门——python数据类型
    一、数据类型1、核心数据类型:数字:int, long(python3.5已经没有), float, complex, bool字符:str, unicode列表:list字典:dict元组:tuple集合:set(可变集合),frozen...
    99+
    2023-01-31
    数据类型 入门 python
  • 「数据挖掘入门系列」Python快速入门
    Python环境搭建本次入门系列将使用Python作为开发语言。要使用Python语言,我们先来搭建Python开发平台。我们将基于Python 2.7版本、以及Python的开发发行版本Anaconda版本来开发。Anacond...
    99+
    2021-03-07
    「数据挖掘入门系列」Python快速入门
  • python基础入门之普通操作与函数(三)
    目录正文操作函数本节主要介绍函数,但是函数是由操作组成的。那么就分为两部,一部分为操作一部分为函数。 正文 py世界中的操作。 操作 if: 在学习任何一门语言中,关系if,要关系另外一件事,那就是if是否只能判断b...
    99+
    2022-06-03
    python类中普通函数 python基础操作 Python 函数
  • ​​​​​​​Python入门学习之函数式编程的方法
    本篇内容介绍了“Python入门学习之函数式编程的方法”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言在 Python 中,函数是「头等公...
    99+
    2023-06-30
  • SQL 入门教程:使用函数
    目录一、文本处理函数二、日期和时间处理函数三、数值处理函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 大多数 SQL 实现支持以下类型的函数。 用于处理文本字符串(如删除或填充值,转换值为大写或小写)的文本函数。 ...
    99+
    2017-06-27
    SQL 入门教程:使用函数
  • SQL 入门教程:聚集函数
    目录一、AVG() 函数二、COUNT() 函数三、MAX() 函数四、MIN() 函数五、SUM() 函数请参阅 目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 我们经常需要汇总数据而不用把它们实际检索出来,为此 SQL 提供...
    99+
    2020-07-09
    SQL 入门教程:聚集函数
  • Python数据分析入门
    本文来分享一下如何通过Python来开始数据分析。具体内容如下:数据导入导入本地的或者web端的CSV文件;数据变换;数据统计描述;假设检验单样本t检验;可视化;创建自定义函数。数据导入这是很关键的一步,为了后续的分析我们首先需要导入数据。...
    99+
    2023-01-31
    入门 数据 Python
  • Python入门
    ---恢复内容开始---   在这章中,我了解到了计算机的概念、Python的发展史以及Python语言的版本之间的区别,并自己安装了Python的编辑器。通过安装Python编辑器,我认识到安装软件也可以在官网上安装。     在第...
    99+
    2023-01-30
    入门 Python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作