Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python基础:自定义函数

Python基础:自定义函数

作者头像
py3study
发布于 2020-01-15 08:41:23
发布于 2020-01-15 08:41:23
39600
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

函数的形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def name(param1, param2, ..., paramN):
    statements
    return/yield value # optional
  • 和其他需要编译的语言(比如 C 语言)不一样的是,def 是可执行语句,这意味着函数直到被调用前,都是不存在的。当程序调用函数时,def 语句才会创建一个新的函数对象,并赋予其名字。
  • Python 是 dynamically typed ,对函数参数来说,可以接受任何数据类型,这种行为在编程语言中称为多态。所以在函数里必要时要做类型检查,否则可能会出现例如字符串与整形相加出异常的情况。

函数的嵌套:

  例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def f1():
    print('hello')
    def f2():
        print('world')
    f2()
f1()
'hello'
'world'

  嵌套函数的作用

  • 保证内部函数的隐私
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def connect_DB():
    def get_DB_configuration():
        ...
        return host, username, password
    conn = connector.connect(get_DB_configuration())
    return conn

  在connect_DB函数外部,并不能直接访问内部函数get_DB_configuration,提高了程序的安全性

  • 如果在需要输入检查不是很快,还会耗费一定资源时,可以使用函数嵌套提高运行效率。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def factorial(input):
    # validation check
    if not isinstance(input, int):
        raise Exception('input must be an integer.')
    if input < 0:
        raise Exception('input must be greater or equal to 0' )
    ...

    def inner_factorial(input):
        if input <= 1:
            return 1
        return input * inner_factorial(input-1)
    return inner_factorial(input)
print(factorial(5))

函数作用域

  1.global

  在Python中,我们不能在函数内部随意改变全局变量的值,会报local variable 'VALUE' referenced before assignment。

  下例通过global声明,告诉解释器VALUE是全局变量,不是局部变量,也不是全新变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
VALUE = 10
def validation_check(value):
    global VALUE
    VALUE += 3 #如果注释掉global VALUE,会报local variable 'VALUE' referenced before assignment
    print('a:',VALUE)

validation_check(1)
print('b:',VALUE)
#a: 13
#b: 13

  2.nonlocal

  对于嵌套函数,nonlocal 声明变量是外部函数中的变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def outer():
    x = "local"
    def inner():
        nonlocal x # nonlocal 关键字表示这里的 x 就是外部函数 outer 定义的变量 x
        x = 'nonlocal'
        print("inner:", x)
    inner()
    print("outer:", x)
outer()
# inner :nonlocal
# outer :nonlocal

  当内部变量与外部变量同名时,内部变量会覆盖外部变量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def outer():
    x = "local"
    def inner():
        x = 'nonlocal' # 这里的 x 是 inner 这个函数的局部变量
        print("inner:", x)
    inner()
    print("outer:", x)
outer()
# 输出
# inner: nonlocal
# outer: local

闭包

  • 内部函数返回一个函数
  • 外部函数nth_power()中的exponent参数在执行完nth_power()后仍然会被内部函数exponent_of记住
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def nth_power(exponent):
    def exponent_of(base):
        return base ** exponent
    return exponent_of # 返回值是 exponent_of 函数

square = nth_power(2) # 计算一个数的平方
cube = nth_power(3) # 计算一个数的立方 
# square
# # 输出
# <function __main__.nth_power.<locals>.exponent(base)>

# cube
# # 输出
# <function __main__.nth_power.<locals>.exponent(base)>

# print(square(2))  # 计算 2 的平方
# print(cube(2)) # 计算 2 的立方
# # 输出
# 4 # 2^2
# 8 # 2^3

参考:

  极客时间《Python核心技术与实战 》

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/06/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python学习要点(一)
由于列表是动态的,所以它需要存储指针,来指向对应的元素。另外,由于列表可变,所以需要额外存储已经分配的长度大小,这样才可以即使扩容。
luozhiyun
2020/04/09
3700
最易写出bug?Python命名空间和作用域介绍
简单的说,命名空间就是一种“名称-对象”的映射表,使得我们可以通过对象指定的名称来访问它们。
MeteoAI
2019/08/12
7510
最易写出bug?Python命名空间和作用域介绍
python 基础语法笔记
记录python的一些基础语法,用于查阅 列表和元组 列表和元组都是有序的,可以存储任意数据类型的集合 列表是动态的,长度可变,存储空间和性能略逊与元组 元组是静态的,长度大小固定,不能增加修改 创建一个列表使用 empty_list = [] 相比于 list() 更好,因为 [] 底层走的c,而 list() 是函数,更加贵 l = [1, 2, 3, 4] tup = (1, 2, 3, 4) list((1, 2, 3)) [1, 2, 3] l.count(3) l.index(7) l.re
LinkinStar
2022/09/01
2890
Python基础篇
Python语言比起C++、Java等主流语言,语法更简洁,也更接近英语,对编程世界的新人还是很友好的,这也是其显著优点。最近总有人问我Python相关的问题,这些问题也偏基础,自古有句话,授人以鱼不如授人以渔,刚好趁五一时间总结了几篇Python的知识点,帮助小伙伴成功入坑Python,将这门工具语言顺利掌握起来。
架构狂人
2023/08/16
8440
Python基础篇
深入探讨Python中的命名空间与作用域
在Python中,命名空间(Namespace)和作用域(Scope)是两个重要的概念,它们决定了变量的可见性和访问规则。本文将深入探讨Python中命名空间和作用域的概念,并通过代码实例进行解释。
一键难忘
2024/07/05
2940
深入理解Python变量作用域与函数闭包
1、引言 最近遇到一个求最长回文子串的题目,于是,我写了如下的代码: class Solution(object): def longestPalindrome(self, s): """ :type s: str :rtype: str """ if len(s) < 2: return s maxlen = 0 res = ''
石晓文
2018/04/11
1.7K0
Python闭包(Python Closures)介绍
在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是引用了自由变量的函数。
AIFEx
2023/09/23
9560
Python闭包(Python Closures)介绍
Python进阶|函数变量作用域
在Python编程中,函数是我们接触较多的知识点,毕竟函数是用来节省代码量和提高程序效率很重要的一个手段。
罗罗攀
2019/10/08
7360
Python进阶|函数变量作用域
【重学Python】Day4作用域,Python关键字global和nonlocal使用
作用域是指变量的有效范围。变量并不是在每一个位置都可以访问,访问权限取决于这个变量在哪里赋值,作用域哪个作用域内。在python中的作用域一共分为4种。分别是:
李鹏华
2024/04/25
4970
Python进阶|装饰器的那些事(一)
装饰器在日志、缓存等应用中有广泛使用,我们首先从之前讲解的闭包为出发点,给大家讲解装饰器的那些事。
罗罗攀
2019/10/29
3560
【python篇】关于函数当中的那些事,轻松拿捏
函数的定义:使用 def 关键字定义一个函数,以及函数的基本结构,包括函数名、参数列表、函数体和返回值。
用户11286421
2024/09/23
1040
Day4作用域,Python关键字global和nonlocal使用
@[TOC](【重学Python】Day4作用域,python关键词global和nonlocal使用)
李鹏华
2024/04/25
1010
Python之函数进阶
一、命名空间 命名空间一共分为三种:   全局命名空间   局部命名空间   内置命名空间 全局命名空间:代码在运行伊始,创建的存储“变量名与值的关系”的空间 局部命名空间:在函数的运行中开辟的临时的空间 内置命名空间:Python中内置的,存放了python解释器为我们提供的名字:input,print,str,list,tuple...它们都是我们熟悉的,拿过来就可以用 三种命名空间之间的加载顺序:内置命名空间(程序运行前加载)->全局命名空间(程序运行中:从上到下加载)->局部命名空间(程序运行中:调
新人小试
2018/04/12
7210
理解 Python 的 LEGB
Python 的名字空间是 Python 一个非常核心的内容。 其他语言中如 C 中,变量名是内存地址的别名,而在 Python 中,名字是一个字符串对象,它与他指向的对象构成一个{name:object}关联。 Python 由很多名字空间,而 LEGB 则是名字空间的一种查找规则。
py3study
2020/01/02
7700
手撕Python之函数
函数的作用:我们把需要反复执行的程序封装起来,制作成一个可以反复调用的工具,这个工具在编程中就叫函数
凯子坚持C
2024/09/23
1260
手撕Python之函数
Python进阶|函数的闭包
函数的闭包其实和函数的嵌套很相似,大家对于函数的嵌套应该是很熟悉的,那么先写一个简单的函数嵌套案例:
罗罗攀
2019/10/15
4680
python: 函数详解
def square(x): return x**2 >>> square <function square at 0x031AA230> >>> dir(square) ['__call__', '__class__', '__closure__','__code__', '__defaults__', '__delattr__', '__dict__', '__doc__', '__format__','__get__', '__getattribute__', '__globals__', '__ha
昱良
2018/04/04
1.6K0
Python3学习笔记 | 十九、Python的函数-作用域
作用域针对的是变量。在使用同一个变量名时,会出现作用域问题。如右边的x,在函数里与函数外是不同的变量。 • 一个def内定义的变量名能够被def内部使用。不能在函数外部引用这个变量名。 • def内的变量名与def外的变量名并不冲突。在def内赋值的与def外赋值的相同变量名是不同的变量。 变量名有如下三种不同作用域: 1、全局:在def外定义的变量名是全局变量 2、本地:在def内部定义的叫做本地变量 3、其它:嵌套def时,各自的变量也是独立的。
TeamsSix
2019/09/24
5880
【globlal与nonlocal和闭包函数、装饰器、语法糖】
在py文件中,一般无法调用函数体内变量名,而global可使函数体代码内的变量名直接在函数体外部调用,条件是在需要调用的代码体中使用global 调用需要的变量名 未使用global情况
老虎也淘气
2024/01/30
1280
深入浅出一下Python函数的核心概念与进阶应用
存在函数作为参数传递给函数,并且又不想让外界访问,而且参数函数足够简单,即可以定义为匿名函数(lambda表达式)
盛透侧视攻城狮
2025/04/14
980
深入浅出一下Python函数的核心概念与进阶应用
相关推荐
python学习要点(一)
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验