学习Python之路之Python语法——函数、引用和装饰器(语法糖)

本文详细介绍了Python中的函数概念,包括函数的定义与使用、参数类型、变量作用域等,并通过实例展示了如何利用装饰器增强函数功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、函数

1、函数的定义

函数:就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用
函数是带名字的代码块,用于完成具体的工作,需要在程序中多次执行同一项任务时,无需反复编写完成该任务的代码,只需要调用该任务的代码

函数的使用包含两个步骤:

  • 定义函数——封装独立的功能
  • 调用函数——享受封装的成果

2、定义函数

def 函数名():

函数封装的代码

【1】def是英文define的缩写,定义的意思

【2】函数名称应该能后表达函数封装代码的功能,方便后续的调用

【3】函数名称的命令应该符合标识符的命名规则:可由数字、字母和下划线组成,不能以数字开头,不能与关键字重名

示例【1】:定义函数

def say_hello():
    print 'hello1'
    print 'hello2'
    print 'hello3'
say_hello()    #函数的调用,函数在不主动调用的时候是不会主动执行的

示例【2】:求两数字的和

def sum_2_sum():
    """对两个数字的求和"""
    num1 = 20
    num2 = 20
    result = num1 + num2
    print '%d + %d = %d' %(num1,num2,result)

sum_2_sum()

3、形参和实参

形参(顾名思义,形式上的参数):定义函数时,小括号中的参数,是用来接受参数的,在函数内部作为变量使用,形参可以任意起名字

实参(真实的数据信息):调用函数时,小括号中的参数,是用来把数据传递到函数内部用的

def sum_2_sum(num1,num2):    #小括号里面的就是形参,形式上的参数,没有实际意义,可以任意起名
    result = num1 + num2    #定义两数相加
    print '%d + %d = %d' %(num1,num2,result)
sum_2_sum(5,20)        #小括号中的就是实参,实际的参数,里面包含着真实的数据信息

4、局部变量与全局变量

局部变量:是在函数内部定义的变量,只能在函数内部使用,函数执行结束后,函数内部的局部变量,会被系统回收,不同的函数,可以定义相同名字的局部变量,但是各用各的不会产生影响

示例【1】:

a = 1
print 'outside:',id(a)
def fun():
    a = 5
    print 'inside:',id(a)
fun()
print a
print id(a)

全局变量:全局变量是在函数外部定义 的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量

示例【2】:

num = 10
def demo1():
    print 'demo1=====>%d' % num
def demo2():
    print 'demo2=====>%d' % num
demo1()
demo2()

修改全局变量的值,可以使用global关键字声明一下变量即可

示例【3】:

a = 1

print 'outside:',id(a)
def fun():
    global a # 声明a为全局变量
    a = 5
    print 'inside:',id(a)
fun()
print a
print id(a)

5、参数的分类(四类:位置参数、默认参数、可变参数、关键字参数)

(1)位置参数:形参和实参个数必须保持一致

示例【1】:

def getInfo(name,age):
    print name,age
getInfo(age=12,name='westos')

(2)默认参数:形参和实参的个数可以不一致

def mypow(x,y=2):
    print x**y
mypow(4)
mypow(4,3)

(3)可变参数:需要用*args来接收数值

示例【2】:

def mysum(*agrs):
    """
    *args:是可变参数
     args:是元组类型数据
     args:名字可变(因为是形参 名字可变)
    :param agrs:
    :return:
    """
    sum = 0
    for item in agrs:
        sum += item
    print sum
mysum(1,2,3,4)

(4)关键字参数

def getStuInfo(name,age,**kwargs):
    print name,age
    print kwargs
getStuInfo('westos',18,hobbies=['code','running'],gender ='female')

5、函数的返回值

返回值:函数运算的结果,还需要进一步操作时,给一个返回值

return用来返回函数执行结果的,若没有返回值,默认为None,一旦遇到return,函数执行结束,后面的代码不会执行

def mypow(x, y=2):
    return x ** y, x + y
    print 'hello'
# 对元组进行解包
print (mypow(4))
a = mypow(4,3)
print a

二、引用

def test(num):
    print '在函数内部%d对应的内存地址是%d' %(num,id(num))
    result = 'hello'
    print '函数要返回的数据的内存地址是 %d' %id(result)
    return result
a = 10
print 'a变量保存数据的内存地址是%d' %id(a)
r = test(a)
print '%s 的内存地址是 %d' %(r,id(r))

三、装饰器

1、概念

把一个函数当作参数,传递给函数,返回一个替代版的函数,本质上是返回值的函数,

在不改变原函数的基础上,给函数增加新的功能

示例【1】:

def func1():
    print 'have a nice day!'
def func2():
    print 'good luck!'
def outer(func):
    def inner():
        print '*********'
        func()
        print '*********'
    return inner
func1 = outer(func1)
func1()

示例【2】:

def say(age):
    print 'man is %d years old' % age
def outer(func):
    def inner(age):
        if age < 0:
            age = 0
        func(age)
    return inner
# "化妆过的函数"
say = outer(say)
# 其实是调用的新的函数
say(-10)

2、语法糖的应用

示例【1】:

def desc(fun):
    def add_info():
        print '中秋快乐',
        fun()
        print '西开欢迎你'
    return add_info
@desc
def login():
    print 'login....',
@desc
def logout():
    print 'logout....',
login()
logout()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

:,之

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值