2025年python函数

python函数1 函数 function 1 什么是函数 函数是可以重复执行的代码块 可以重复使用 2 作用 定义用户级的函数 3 语法 def 函数名 参数列表 语句块 语法说明

大家好,我是讯享网,很高兴认识大家。

 

1 函数 function
1)什么是函数:

      函数是可以重复执行的代码块,可以重复使用

2)作用:

定义用户级的函数

3)语法:

def 函数名(参数列表):

语句块·····

语法说明:

a)      函数名是语句块的名称

b)      函数名的命名规则与变量名相同(标识符)

c)       函数的名字是一个变量,是绑定代码块的名称

d)      函数有自己命名空间,要让函数处理外部数据需要用参数给函数传入一些数据,如果不需要传入参数,参数列表为空

e)      语句块部分不能为空,如果为空需要填充pass语句

示例:

def  say_hello():

   print("hello world")

   print("hello tarena")

   print(0 + 19)

 

say_hello()          #执行正常

say_hello = 10

print(say_hello)        #执行正常

say_hello()                   #执行错误

解释:函数名和变量名相同,可以随意赋值,但是一般情况不能修改函数名

示例:

a=1000

b=129

def  mysum(a,b):

   print("调用 mysum(%s ,%s)" %(a,b))

mysum(10,10000)  #’’’调用 mysum(10,10000)" 此时a,b是实参 ,对函数之上的全局变量不管’’’

          解释:函数有自己命名空间,要让函数处理外部数据需要用参数给函数传入一些数据

 

4)函数的调用

函数名(参数列表)

调用说明:

a)      函数调用是一个表达式

b)      如果没有return语句,函数执行完毕后返回None对象

c)       如果函数需要返回其它的值对象需要用return语句

 示例:

   >>>def  h():

...    print("调用",h())   #··· 是要保持和>>>匹配,提示可以#在此输入

...

>>>         #返回None对象

 

return 语句

语法:

  return [表达式]

  [] 可省略

作用:结束当前函数的执行,返回到调用该函数的地方,同时返回一个值对象的引用关系

语法说明:

a)      return 语句后跟的表达式可以省略,省略后相当于return None

b)      如果函数内没有return语句,则函数执行完最后一条语句后返回None(相当于在最后一条return None语句)

c)       函数的调用可以返回一个值或一组值

示例

defsummmer(a,b):

    print(a+b)

    return '调用  '*(a+b)

 

_qiuhe_=summmer         #变量名一样使用

 

print(_qiuhe_(1,2))          # 3 有返回值时,打印内容

          示例2

                 deffun2():

                    return

                    print('最后一行')            

 

r = fun2()

print(r)               #None  注意return之后的函数语句不再执行

函数的参数传递
1)传递方式:

a)      位置传参

b)      *序列传参

c)       关键字传参

2)位置传参

     实际参数的对应关系与形式参数的对应关系是以位置来一次对应的

   示例1

          defsum3(a,b,c):

                 returna+b+c

          x= sum3(1,2,3)

          解释: 1实参 对应 a形参

位置传参说明:

          实参和形参通过位置进行对应和传递

          实参和形参的个数必须完全相同

3)序列传参

序列的元素个数必须与列表的个数相同

示例1

def myfun(a,b,c):

   print("a--->",a)

   print("b--->",b)

   print("c--->",c)

 

#位置传参

myfun(1,2,3)

 

#序列传参  字符串,列表,元组

#如果序列所含元素和函数参数个数不对应可以而切片

s1=[4,5,6]

myfun(*s1)

 

s2="ABC"

myfun(*s2)

4)关键字传参

   关键字传参是指传参时,按照形参的名称给形参赋值,实参和形参按照名称进行匹配

   数量必须对应

   defmyfun(a,b,c):

   print("a--->",a)

   print("b--->",b)

   print("c--->",c)

 

#位置传参

myfun(1,2,3)

 

#序列传参  字符串,列表,元组

#如果序列所含元素和函数参数个数不对应可以而切片

s1=[4,5,6]

myfun(*s1)

 

s2="ABC"

myfun(*s2)

 

#关键字传参:

myfun(b=100,a=200,c=700)

5)字典关键字传参

实参和形参通过字典进行传递和匹配,字典的值传递给键对应的形参

说明:

   字典传参的键名和形参名必须一致

   键名必须为字符串

   键名要在形参中存在

示例:

#字典关键字传参  dict

d = {'a':10,'b':20,'c':30}

myfun(d)

6)综合传参

四种传参方式,打套组合拳

示例:

def myfun(a,b,c):

   print("a--->",a)

   print("b--->",b)

   print("c--->",c)

 

#综合传参

myfun(*[1], *(200,300))

print()

myfun(100, c=90, b=6)

print()

myfun(100, *(200, 300))

print()

myfun(100, {'b': 20,'c': 30})

print()

myfun(*(100,), {'b': 2, 'c': 3})

print()

myfun(*('A'),{'c': 7}, b=9)

以下是错误 

#位置参数之后不能跟关键字参数

# myfun(c=90,b=6,50)

函数的定义(创建函数或函数形参)
1)函数的缺省参数
(1)语法:

def 函数名(形参1=默认参数1,形参2=默认参数2······)

  语句块

(2)示例:

def  info(name,age=1, addr='不详'):

      print('姓名',name,'年龄',age,'住址',addr)

#调用

info("无所谓", addr="不管")

info("观世音", age=, addr="南海")

info("常侍")

(3)缺省参数说明:

a)    缺省参数必须从右之左依次存在,如果一个参数有缺省值,则其右侧的所有参数都必须有缺省参数(缺省值)

b)    缺省参数可以有0个或1个及以上,甚至全部是缺省参数

(4)错误缺省参数函数

def  fn(a, b=10,c): pass

def  fn(a=1,b, c=5): pass

2) 星号元组形参
(1)语法:

   def函数名(*元组形参名):

          语句块

(2)示例:

 

  

def myfum(*args):

    print("实参个数是", len(args))

    print(args)

for x in args:

 

        print(x)

 

 

myfum(2, 5)

 

执行结果

实参个数是 2

(2, 5)

2

5

 

myfum("100", 200, "Tree", 4.4)

执行结果

实参个数是 4

('100', 200, 'Tree', 4.4)

100

200

Tree

4.4

 

3) 命名关键字形参
(1)语法:

          def  函数名(*,命名关键字形参名):

                  语句块

          或

          def  函数名(*args,命名关键字形参名):

                 语句块

(2)示例:

          示例1:

          defmyfun1(a,b,*,c): #c为命名关键字

                 print(a,b,c)

          myfun1(1,2,c=3)

          myfun1(11,12,33)#错误,必须指明关键字,不能位置传参

 

示例2

 

def myfun2(a,*args,b,c):      #b,c是关键字形参,传参数是只能#按照关键字进行传参

myfun2(1,2,3,4)  #错误

myfun2(1,2,b=3,c=4) #(1,(2,),3,4)

4)双星号字典形参
 (1)语法

   def函数名(字典形参名)

          语句块

(2)示例

   defmyfun(kwargs):

      print("参数个数", len(kwargs))

     for k,v in kwargs.items():

       print(k, "--->", v)

 

 

# 调用

myfun(name="tarena", age=15) #dict(kwagrs)生成非空字典相同

          注意:字典形参的格式,写入一个字典参数{},会报错

执行结果参数个数 2

name ---> tarena

age ---> 15     

5) 函数的参数列表顺序:

   位置形参,缺省参数,星号元组形参,双星号字段形参,命名关键字参数可以混合使用

函数参数自左向右的顺序为

   位置形参,星号元组形参,命名关键字参数,双星号字典形参

例:

   deffn(a,b,*args,c,kwargs):

          print(a,b,args,c,kwargs)

 fn(1,2,3,4,c=5,name=”tarena”,age=15)

可变/不可变的实参的参数传递区别

可变数据类型(关键在于可增加)

                list  dict set

不可变类型

         float int str ········

1)可变/不可变数据类型区别:

  不可变的类型的数据作为函数参数传入时,函数内部不会改变变量的元数据值,是安全的

  可变类型的数据作为参数穿入时,函数内部可以改变元数据,多用来返回更多数据结果

2)问题

函数只能通过返回值传回数据吗?

不是,还可以通过返回可变数据类型

示例

示例1

l = []

def fn(x):

   x.append(10)

fn(l)

print(l) #结果


讯享网

示例2

d = {}

def fn(x):

   x["name"] = 'tarena'

 

fn(d)

print(d)   #{'name': 'tarena'}

示例3

t = (1,2,3)

 

def fn(x):

   x[1] = 2.2

 

 

print[t]

fn(t)       #执行报错TypeError: 'tuple'object does not support #    item assignment

print(t)

示例4

t = (1,2,3)

 

def fn2(x):

    x= (4,5,6)

   return x

 

print(t)

 

print(fn2(t))

print(t)

 

函数执行结果:

(1, 2, 3)

(4, 5, 6)

(1, 2, 3)

 

示例5

t = (1,2,3)

 

def fn2(x):

    x= (4,5,6)

 

print(t)

 

print(fn2(t))

print(t) 

执行结果:

(1, 2, 3)

None

(1, 2, 3)

示例6

t = (1, 2, 3)

 

 

def fn2(x):

    x += (4, 5, 6)

    return x

 

 

print(t)

 

print(fn2(t))

print(t)

执行结果

(1, 2, 3)

(1, 2, 3, 4, 5, 6)

(1, 2, 3)

l = [1,2,3]

 

def fn2(x):

    x += [4,5,6]

    x.append([4,5,6])

    return x

 

print(l)

 

print(fn2(l))

print(l)

执行结果

[1, 2, 3]

[1, 2, 3, 4, 5, 6, [4, 5, 6]]

[1, 2, 3, 4, 5, 6, [4, 5, 6]]

l = [1,2,3]

 

def fn2(x):

    x = [4,5,6]

    x.append([4,5,6] )

    x+=[4]

    return x

 

print(l)

print(fn2(l))

print(l)

执行结果

[1, 2, 3]

[4, 5, 6, [4, 5, 6], 4]

[1, 2, 3]

 

 

函数嵌套
1)定义

函数嵌套

是指一个函数里用语句来创建其它函数的情况

函数变量

   函数名是变量,它是创建函数时绑定一个函数

2)函数变量示例:

def fn():

    print("hello")

 

dn = fn

dn()                       #结果 hello

3)嵌套示例:

def fn_order():

   print("外部函数")

 

   def cn_inner():

       print("fn_inner被调用")

 

   cn_inner()

 

 

fn_order()

注意:函数只有调用时才能被执行,如果把cn_inner()这句代码去掉则不会执行内部函数

6函数作为函数的返回值

示例:

def getfn():

   def print_hello():

       print("Hello")

   return print_hello

 

fn=getfn() #fn =print_hello地址 <functiongetfn.<locals>.print_hello at 0x7f45e6747c80> 

fn()                         #fn()    函数名是变量

执行结果

hello

 

 

def getfn():

   def print_hello():

       print("Hello")

   return print_hello()


 

fn=getfn()                      

执行结果:

  Hello

None

 

 

 

 

 

 

 

 

 

 

 

 

 

7函数作为函数的参数传递

   示例

def tab(x, y):

return "|"+x.center(13)+"|"+\

y.center(13)+"|"

 

 

def stri(x, y):

    return "姓名:"+str(x)+'  age:'+str(y)

 

 

def myprint(fx, x, y):

    print(fx(x, y))

 

 

myprint(tab, "tarena", "15")

myprint(tab, "abc", "19")

myprint(stri,"def","24")

myprint(stri,"good","65")

执行结果

|    tarena   |      15     |

|     abc     |      19     |

姓名:def  年龄:24

姓名:good  年龄:65

 

全局变量和局部变量
1)局部变量:

定义在函数内部的变量(包含函数参数)

函数执行时存在,函数执行完后即销毁

2)全局变量:

定义在函数外部,模块内部的变量

一直存在,除非调用del函数

3)示例

v = 100    #全局变量

 

 

def fn():

    v =200  局部变量

    print(v)

fn()

print(v)

 

执行结果

200

100

 v = 100   

 

def fn(v):

    v +=200

    print(v)

fn(v)

print(v)

 

 

执行结果

300

100

def func():

    global v

    v=100

func()

print(v)

 

注意先后顺序

执行结果:

100

 

python作用域
1)作用域定义

也叫名字空间,是变量访问的时候查找变量名的范围空间

2)示例

v = 100   

 

def fn():

    print(v)

fn()

print(v)

执行结果

100

100

先从里面找,找不到往外扩散找

3)四种作用域

局部作用域(函数内) Local  L

外部嵌套函数作用域  Enclosing function locals E

函数定义所在模块(文件)的作用域 全局作用域 Global(module) G

python内置模块的作用域   Builtin(python)B

4)变量名的查找规则

在访问变量时,先查找本地变量,然后是包裹此函数的外部函数的函数内部的变量,之后是全局变量,最后是内置变量

L -------->  E -----------> G  ---------->B

示例

v = 100         #全局作用域G

 

查找

小讯
上一篇 2025-02-11 18:55
下一篇 2025-02-10 15:25

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69716.html