Python学习 :函数

函数

函数(Functions)

是指可重复使用的程序片段。它们允许你为某个代码块赋予名字,允许你通过这一特殊的名字在你的程序任何地方来运行代码块,并可重复任何次数。这就是调用(Calling)函数。

函数的作用:

1、减少重复代码

2、方便修改,更易扩展

3、保持代码的一致性

函数的创建:

def 函数名(参数1,参数2...):

函数体(语句块)

函数名的命名规则:

必须以下划线和小写字母为开头,一般用小写字母和单下划线、数字等组合函数名是区分大小写的

函数体(语句块)前,需要缩进4个空格

调用函数时一定记得要加括号

函数名后面的括号中,可以有参数列表,也可以没有参数

函数名是区分大小写的

形参与实参:

形参:形势参数,在函数中定义时的参数,不实际存在,是虚拟的变量

实参:实际参数,在调用函数过程中使用的参数,传给形参

区别:形参是虚拟的,不占用内存空间,只有在被调用时才分配内存单元

   实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参

函数的参数

一、必需的参数:

必需参数须以正确的顺序传入函数中,调用时的顺序必须和函数声明时一致

二、关键字参数

函数可以通过关键字参数来确定传入的参数值,使用关键字参数允许函数调用时参数时顺序与声明时不一致,关键字参数在实参中添加

def print_info(name,age,job):
    print(‘Name: %s‘ %name)
    print(‘Age: %d‘ %age)
    print(‘Job: %s‘ %job)

print_info(‘Mike‘,20,‘student‘)  #必需参数
print_info(name=‘Mike‘,age=20,job=‘student‘) #关键字参数

三、默认参数(缺省参数)

调用函数时,默认参数的值如果没有被传入,即为默认值,默认参数可以在形参中添加

def print_info(name,age,job=‘student‘):  #默认参数需要跟在其他参数后
    print(‘Name: %s‘ %name)
    print(‘Age: %d‘ %age)
    print(‘Job: %s‘ %job)
    print(‘---------------------‘)
print_info(‘Mike‘,20)
print_info(‘Alex‘,20)
print_info(‘John‘,35,‘teacher‘)   #改变默认参数的值

四、不定长参数

当处理比当初声明时更多的参数时,可以使用不定长参数,声明时不需要进行命名。

星号(*)的变量名会存放所有未命名的变量参数,使用一个元组来进行储存。

两个星号(**)的变量名会存放命名的变量参数,使用字典中的键值对来进行储存

注意:关于不定长参数的位置:*args参数放在左边,**args参数放在右边

   如果有默认参数存在,放在左边,关键字参数放在最左边,最后是不定长参数

Eg.*args

def add(*args):  #*args表示函数接收不定长的参数
    print(args)
    sum = 0
    for i in args: # args为一个元组
        sum += i
    print(sum)
add(1,2,3)

Eg.**kwargs

def print_info(*args,**kwargs):
    print(args)
    print(kwargs)
    for i in kwargs:
        print(‘%s : %s‘ %(i,kwargs[i]))
print_info(‘John‘,35,‘teacher‘,hobby=‘reading‘) #**kwargs数据会被处理成为一对键值对放入字典中

函数的返回值

获取函数的执行结果,可以使用return语句来执行把结果返回

return的作用:1、结束当前函数 2、返回某个对象的值

注意:1.函数默认的return值为None,即如果未指定return语句,函数默认返回None

   2.return可以返回多个对象,并把多个对象封装成为一个元组,作为一个整体输出

函数的作用域

4种不同的作用域:

L:local,局部作用域,也称本地作用域,函数中定义的变量;

E:enclosing,嵌套作用域,嵌套的父级函数的局部作用域,即包含此函数的上级函数的局部作用域,但不是全局的;

G:global,全局作用域,全局变量,就是模块级别定义的变量;

B:built-in,内建作用域,系统固定模块里面的变量,例如int,bytearray;

a = 0 # global
d = 4 # global
def outer():
    c = 3 # enclosing
    d = 5 # enclosing
    global a
    a = 1  # 由 enslosing 修改为 global
    def inner():
        b = 2  # local
        d = 6  # local
        print(‘本地作用域中变量b:‘,b)
        print(‘此时的变量d:‘,d)
    inner() # 调用inner函数
    print(‘嵌套作用域中变量c:‘,c)
    #print(b) 语句会报错(name ‘b‘ is not defined),因为python找不到变量b声明的值

outer()
print(‘全局作用域中变量a:‘,a)
>>>本地作用域中变量b: 2
  此时的变量d: 6
  嵌套作用域中变量c: 3
  全局作用域中变量a: 1

global关键字

在内部作用域中,当要修改外部作用域(全局作用域)的变量的时候,这时可以使用global关键字

a = 0 # global
def outer():
    global a
    a = 1 # 将 enclosing 修改为 global
print(‘-------------------‘)
print(‘修改前:‘, ‘a =‘, a)
outer() # 调用outer函数
print(‘-------------------‘)
print(‘修改后:‘, ‘a =‘, a)
>>>-------------------
   修改前: a = 0
   -------------------
   修改后: a = 1

nonlocal关键字

在嵌套作用域中,当要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量时,这时可以使用nonlocal关键字

def outer():
    a = 1  # enclosing
    b = 7  # enclosing
    def inner():
        a = 2 # local
        nonlocal b
        b = 8 # 将 local 修改为 enclosing
    print(‘-------------------‘)
    print(‘修改前:‘,‘a =‘,a,‘b =‘,b)  #没有调用inner函数前,a,b的值
    inner()
    print(‘-------------------‘)
    print(‘修改后:‘,‘a =‘,a,‘b =‘,b)  #调用了inner函数,a的值依然没有修改,因为a=2是在local中
outer()
>>>-------------------
   修改前: a = 1 b = 7
   -------------------
   修改后: a = 1 b = 8

注意:

  • 搜索变量的优先级顺序:作用域局部>>外层作用域>>当前模块中的全局>>python内置作用域;
  • 只有模块、类以及函数才能引入新的作用域;
  • 对于一个变量,内部作用域先声明就会覆盖外部变量,倘若不声明直接使用,就会使用外部作用域的变量;
  • 内部作用域要修改外部作用域变量的值时,修改全局变量要使用global关键字,修改嵌套作用域变量要使用nonglobal关键字;

原文地址:https://www.cnblogs.com/ArticleYeung/p/9782763.html

时间: 2024-07-31 11:52:22

Python学习 :函数的相关文章

python学习——函数的参数

定义函数的时候,我们把参数的名字和位置确定下来,函数的接口定义就完成了.对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解. Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码. 位置参数 我们先写一个计算x2的函数: def power(x): return x * x 对于powe

Python学习—函数

函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率. 1.定义函数 Python 定义函数使用 def 关键字,一般格式如下: def 函数名(参数列表): 函数体 简单的说明: 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 (). 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数. 函数的第一行语句可以选择性地使用文档字符串-用于存放函数说明. 函数内容以冒号起始,并且缩进. return [表

python学习 函数

# -*- config=utf-8 -*- #################################### 函数 ################################## def func_02(a,b):# a b :形式参数 if a>b: print("a 大于 b") else: print("b大于等于a"); func_02(2,4);# 2 4 :实际参数 #################################

python学习 -函数---递归--模块(os)--时间操作

#函数补充# 位置参数 def hello (name,sex)# 默认值参数 def hello (countyu = 'china')# def send_report(*args) 可变参数.参数组 不是必填,不限制个数,传入后保存为元组 #*args, # 1.不是必填参数 # 2.不限制参数的个数 # 3.传入多个参数的时候他把参数放到一个元组里面# def send_report(*args):# print('发邮件')# print(args)# send_report()# s

Python学习-函数补充1

1.普通参数(严格按照顺序,将实际参数赋值给形式参数) 2.默认参数(必须放置在参数列表的最后) 3.制定参数(将实际参数赋值给指定的形式参数) 4.动态参数:*(一个*表示在传递参数时,传递的所有参数都会被当作一个元素存放进元组中) (传递的参数前面带一个*时,表示将该参数拆分开,将其拆分的字符分别作为一个元素存放进元组中) def f1(*args):    print(args) f1(["lq",12,"le"]) ("["lq"

day10 python学习 函数的嵌套命名空间作用域等

1.三元运算 #1.三元运算 利用已下方法就可以实现一步运算返回a b中大的值 def my_max(a,b): c=0 a=int(input('请输入')) b=int(input('请输入')) # if a>b: # c=a # else: # c=b #或者这样 c = a if a > b else b return c ret=my_max(1,3) print(ret) 2.补充上节差的知识点 形参: #位置参数 #默认参数(关键字参数) #动态参数 *args:接收说有按照位

python学习--函数例子

1 #01 函数的定义,调用 2 #生日歌 3 def happy(): 4 print("Happy birthday to you!") 5 6 def sing(person): 7 happy() 8 happy() 9 print("Happy birthday, dear", person + "!") 10 happy() 11 12 def main(): 13 sing("Mike") 14 print()

第22日python学习函数前引和递归

函数前引用:函数即变量,需要在引用前定义好. def test (): print("from test") test1() def test1(): print("from test1")test() def test (): print("from test") test1()test()def test1(): print("from test1") 递归:例如:问路的事情(问了很多人),最后一个人知道了在回传回来 原文

Python学习-函数补充2-内置函数

1.abs()    求绝对值 2.all()     参数全部为真,则返回True,否则返回False 3.any()    参数中存在任一个为真,则返回True,全部为假才返回False 4.bin()    将参数转换为二进制表示0b 5.oct()    将参数转换为相应八进制表示0o 6.hex()    将参数转换为相应十六进制表示0x 7.bytes()    将参数转换成字节类型 bytes(要转换的字符串 , 按照什么编码) 8.callable()    是否可被调用的判断

Python学习【第九篇】函数

函数 函数是什么? 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 在学习函数之前,一直遵循:面向过程编程,即:根据业务逻辑从上而下实现功能,其往往用一段代码来实现指定功能,开发过程中最常见的操作就是复制粘贴,就是将之前实现的代码块复制到现需功能处,如下: 1 while True: 2 if cpu利用率 > 90%: 3 #发送邮件提醒 4 连接邮箱服务器 5 发送邮件 6 关闭连接 7 8 if 硬盘使用空间 > 90%: 9 #发送邮件提醒 10 连接邮箱服务器 1