2021-08-03Python基础学习之函数基础、函数、返回值、参数、函数嵌套

一、函数

1 将独立的代码块写进函数,重复使用
2 定义函数基本语法:
   def 函数名(): # 变量的命名规范,中文可以,但不建议

     函数体
3.调用函数 函数名()


二、返回值

  1. 返回值return
  2. 若return 后面为空,则返回的结果为None
  3. return 会给函数的执行者返回值,要打印的话需print()
  4. 若返回多个值,以元祖的形式返回
  5. 函数中遇到return ,此函数结束后此函数中的代码不执行
  6. return 是返回计算值,print()是打印结果

三、参数

  1. 形参:形式上的参数,写在函数定义位置的变量
  2. 实参:实际上的参数,写在函数调用的位置
  3. 传参:函数将实参交给形参的过程
  4. 1必备参数-- 写几个传几个
  5. 2默认参数–给某个参数指定一个默认值,若实参有值则用实参的值
  6. 3可变参数
      传入的值是可变的,可以传多个也可以不传
      *args将实参所有位置参数接收,放在一个元祖中
      args是个普通的形参,’ * '具有特殊意义
  7. 关键字参数
      **kwargs接收所有的关键字参数,然后将其转换为一个字典赋值给kwargs这个形参
      kwargs是个普通的形参,’ ** ’ 具有特殊含义,约定成俗的使用kwargs
     传值时,传关键字参数,即 键=值 的形式 (否则可能会报错)
def test():
    num=100
    return num+12,'九个老师','uxhf'
print(test())  # (100, '九个老师', 'uxhf')
def add(a,b):
    return a+b
print(add(2,3)) # 5
def test1(*args):
    print(args,type(args))
    return args
test1() # () <class 'tuple'>>
def test2(**kwargs):
    print(kwargs,type(kwargs))
    return kwargs
test2() #{}  <class 'dict'>
test2(a='an',b='nb')#{'a': 'an', 'b': 'nb'} <class 'dict'>

四、函数嵌套

嵌套调用 在函数a里面调用函数b
嵌套定义 在一个函数中定义另一个函数

def a():
    name='外层函数'
    print('a')
    def b():
        return name
    return b
print(a())# a \n <function a.<locals>.b at 0x00000197A5E3F268>
print(a()())# a \n 外层函数
def a():
    name='外层函数'
    print('a')
    def b():
        return name
    return b()
print(a())# a \n 外层函数

五、函数的默认参数

  1. 必选参数必须在前,默认参数在后
  2. 一般将参数变化值小的设置为默认参数
  3. 3.函数的初始化
    1. 按照python的哲学:一切皆为对象
    2. 函数就是 types.EunctionType 或者 其子类对象的实例化对象
    3. 解释器读到函数末尾时,则对此函数完成初始化,得到一个 函数名–函数对象 的映射关系
    4. id(object) 函数返回一个对象的唯一标识(唯一不变的整数),在重叠的生命周期中,两个对象可能会有相同的 id
    5. 在CPython解释器中,id(object)的值为对象的内存地址
    6. 函数的默认参数为可变参数时,参数值的改变不会重建对象内存,会受前一次的影响
    7. 为不可变参数时,参数值的变化会重新创建参数的内存空间,本次调用不受前次的影响
    8. 要想使用可变的默认参数需在函数内部重新绑定
#重新绑定默认参数
def fun4(a,li=[]):
    li=[]
    li.append(a)
    return li
print(fun4(2))
print(fun4(3))

#不可变的默认参数
def fun3(i=1):
    print('地址:',id(i))
    i+=1
    print('变后的地址:',id(i))
    return i
print(fun3())# 地址: 140705654625312 变后的地址: 140705448186944 2
print(fun3())# 地址: 140705654625312 变后的地址: 140705448186944 2

#默认函数参数(可变的)
def fun2(m,li=[]):
    print('地址',id(li))
    li.append(m)
    print('变后的地址:',id(li))
    return li
print(fun2(1))# 地址 1524584211976 变后的地址: 2706550242888  [1]
print(fun2(2))# 地址 1524584211976 变后的地址: 2706550242888  [1, 2]
print(fun2(3))# 地址 1524584211976 变后的地址: 2706550242888  [1, 2, 3]

# 默认参数(可变的)
import datetime as dt
from time import sleep
def date(m,time=dt.datetime.now()):
    sleep(1)#线程暂停一秒
    print('%s:%s'%(time.isoformat(),m))
date(1)# 2021-08-26T14:49:09.784256:1
date(2)# 2021-08-26T14:49:09.784256:2
date(3)# 2021-08-26T14:49:09.784256:3


*当全世界都说你是疯子的时候,你就离成功不远了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值