函数的特性与参数

1.函数是什么?
函数一词来源于数学,但编程中的[函数]概念,与数学中的函数是有很大不同的
编程中的函数在英文中也有很多不同的叫法,在BASIC中叫做subroutine(子过程或子程序)
,在pascal中叫做procedure(过程)和function,在c中只有function,在Java里叫
做method。
函数能提高应用的模块性,和代码的重复利用率。你已经知道python提供了许多内建函数
,比如print(),但你也可以自己创建函数,之被叫做用户自定义函数。

定义:函数是指将一组语句的集合通过一个名子(函数名)封装起来,要想执行这个函数,
只有调用其函数名即可。
特性:
1.代码重置
2.保持一致性
3.可扩展性

函数的创建:
格式:

python定义函数使用def关键字,一般格式如下:

在这里插入代码片def 函数名 (参数列表) :
    函数体 <br><br>

def hello():
    print('hello')

hello()#调用
函数名的名命规则:
函数名命必须以下划线或字母开头,可以包含任意字母、数字或下划线组合。
不能使用任何标点符号:
函数名是区分大小写的。
函数名不能是保留字。

形数和实参:
形参:形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参
目的是在函数调用时接受实参 (实参个数,类型应与实参一一对应)

实参:形式参数,调用函数时传给函数的参数,可以是常量、变量,表达式,函数传给参数

区别: 形参是虚拟的,不占用内存空间,形参变量只有在被调用时才分配内存单元,
实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参.

在这里插入代码片
import time
time=time.strftime('%Y--5m--%d')
def f(time)
    print('Now time is : %s'%times')
f(times)

3.函数的参数:
必备参数
关键字参数
默认参数
不定长参数

在这里插入代码片
def logger (log_text):
    f = open("log.txt",'a')
    f.write("2016-08-25 15:24  %s" % log_text)
    f.close()
    print(log_text)
  
函数    !=  function()
计算机函数 == subroutine 子程序 ,procedures 过程
作用:
    1.减少重复代码
    2.方便修改,更易扩展
    3.保持代码的一致性


print("----function 1")
logger("2016-08-25 15:24 exec function 1")
#
#
print("----function 2")
logger("2016-08-25 15:24 exec function 2")
#
print("----function 3")
logger("2016-08-25 15:24 exec function 3")


def f():      # 形参
    print('ok')

f() #调用一定记得加括号

def f(index):
   print('function %s'%index)

f(5) # 调用一定记得加括号




def add(b,a): #按顺序对应
    print(a)
    print(b)       #  实参

add(7,5)
在这里插入代码片实例1def show_shopping_car():
    saving=1000000
    shopping_car=[
        ('Mac',9000),
        ('kindle',8000),
        ('tesla',100000),
        ('python book',105),
    ]
    print('您已经购买的商品如下'.center(50,'*'))
    for i,v in enumerate(shopping_car,1):
        print('\033[35;1m %s: %s \033[0m'%(i,v))

    expense=0
    for i in shopping_car:
        expense+=i[1]
    print('\n\033[32;1m您的余额为 %s \033[0m'%(saving-expense))

show_shopping_car()







在这里插入代码片实例2:
现在我们就用一个例子来说明函数的三个特性:

def action1(n):
    print ('starting action1...')

    with open('日志记录','a') as f:
        f.write('end action%s\n'%n)
 
def action2(n):
    print ('starting action2...')

    with open('日志记录','a') as f:
        f.write('end action%s\n'%n)

def action3(n):
    print ('starting action3...')
    with open('日志记录','a') as f:
        f.write('end action%s\n'%n)

action1(1)
action2(2)
action3(3)


------------------------------------------代码重用

在这里插入代码片def logger(n):
    with open('日志记录','a') as f:
        f.write('end action%s\n'%n)

   

def action1():
    print ('starting action1...')
    logger(1)
   
def action2():
    print ('starting action2...')
    logger(2)

def action3():
    print ('starting action3...')
    logger(3)

action1()
action2()
action3()

------------------------------------可扩展和保持一致
在这里插入代码片加上时间
import time

def logger(n):
    time_format='%Y-%d %X'
    time_current=time.strftime(time_format)

    with open('日志记录','a') as f:
       f.write('%s end action%s\n'%(time_current,n))

def action1():
    print ('starting action1...')
    logger(1)
   
def action2():
    print ('starting action2...')
    logger(2)

def action3():
    print ('starting action3...')
    logger(3)


action1()
action2()
action3()


必须参数:

必须参数须与正确的顺序传入函数。调用时的数量必须和声明时的一样。

在这里插入代码片def f(name,age):

    print('I am %s,I am %d'%(name,age))

f('huage',18)
f('didi',12)

关键字参数:

在这里插入代码片def f(name,age):

    print('I an %s,I am%d'%(name,age))
# f(16,'huage')#报错
f(age=16,name='huage')


默认参数:
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下列会打印
默认的age,如果age没有被传入:

在这里插入代码片def print_info(name,age,sex='male'):

    print('Name:%s'%name)
    print('age:%s'%age)
    print('Sex:%s'%sex)
    
print_info('华哥',18)
print_info('龙龙',20,'female')

不定长参数:
你可能需要一个参数能处理比当初声明时更多的参数。这个参数叫做
不定长参数,和上述两种参数不同,声明时不会名命。

在这里插入代码片def add(x,y):
    return x+Y

def add(*tuples):
    sum=0
    for v in tuples:
        sum+=v

    return sum

print(add(1,2,3,4))
print(add(2,6,3,6))

在这里插入代码片
low 加法器
def add(x,y,z):
    print(x+y+z)

add(1,2,3)
add(2+3)                                  


高大尚
def add(*haha):
    print(haha)
    sum=0
    for i in haha:
        sum+=i
    print(sum)
add(1,2,3,4,5)

加了星号(*)的变量名会存放所有未命名的变量参数。而加(**)
的变量名会存放命名的变量参数.

在这里插入代码片def print_info(**kwargs):
 
    print(kwargs)
    for i in kwargs:
        print('%s:%s'%(i,kwargs[i]))#根据参数可以打印任意相关信息了
 
    return
 
print_info(name='alex',age=18,sex='female',hobby='girl',nationality='Chinese',ability='Python')

#######################位置

def print_info(name,*args,**kwargs): #def print_info(**kwargs,**kwargs,*args):报错

    print('name:%s'%name)

    print('args:',args)
    print('kwargs:',kwargs)

    repr

print_info('alex',18,hobby='girl',nationality='chinese',ability='python')

print_info(hobby='girl','alex',18,nationality='Chinese',ability='Python')  #报错
print_info('alex',hobby='girl',18,nationality='Chinese',ability='Python')   #报错

注意,还可以这样传参:

在这里插入代码片def f(*args):
    print(args)

f(*[1,2,5])

def f(**kargs):
    print(kargs)

f(**{'name':'alex'})

高阶函数时至少满足下列一个条件的函数:
接受一个或多个函数作为输出
输出一个函数

在这里插入代码片def add(x,y,f):
    return f(x) + f(y)

res = add(3,-6,abs)
print(res)
############################
def foo():
    x=3
    def bar():
        return x
    return bar

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值