7_22_中科实训day06


print(‘欢迎大家’)
print(‘学习’)
print(‘python人工智能’)

  • 3行代码不能重复改造成为一个模块,现在我们这样才可以将3行代码放到一个代码块里(函数块里)

一、函数

1.定义函数:

  1. 定义函数的语法格式 def 函数名称 def表示的是函数的关键字

  2. 操作函数: 给函数赋值、定义变量常量等

  3. 调用函数 必须
    作用:可一件代码重复使用,必须很大大量的重复代码实现,并且利用函数代码容易维护!
    可以讲解软件之间的耦合度—解耦性

     def Num():
         print('欢迎大家')
         print('学习')
         print('python人工智能')
    

2.调用函数

       Num()
  • 任何传入参数和自变量必须放在圆括号中

      def Num1(a):# 给函数Num里面传递一个参数
      print('a的值为:',a)
    

#调用函数Num1

       Num1(100)# 通过函数给a进行赋值
  • 备注:函数可以给变量等赋值,!这样的操作效率高
  • 函数的第一行可以选择性的使用文档字符串—用于存放函数说明

注释:此函数是项目里面用于求和的功能函数 ()-----工作里必须指明函数的功能

def sun(a,b):
    print('a的w值为',a)
    print('b的w值为', b)
    #通过函数名称给函数变量 a 和 b赋值
#sum(100,200)
  • 备注:通过以上函数发现,函数可以带多个参数

  • 可以给函数起个别名

  • 此操作需要全局变量 和 局部变量的辅助

    def Num3(a):
      pri = Num3(a)#表示的是将函数Num3给一个变量pri
      print(pri)
      Num3(1000)
    

‘’’
函数的参数类型:实参和形参
‘’’
def PName(username): # uesrname是形参 形参指的是一个不确定的参数的简称–动态形参
print(‘姓名是:’,username)
PName(‘李连杰’) # 实参 实参是给形参赋值的操作

总结: 有形参必须有实参 如果有形参,没实参 程序会报空指针

3.函数的参数

  1. 必备参数(位置实参)
  2. 关键字参数
  3. 默认参数
  4. 必定长参数

(1)必备参数(位置实参)

def Num5(a=10,b=20,c=100): #a,b,c是形参
    print('a的值为:',a)
    print('b的值为:',b)
    print('c的值为:',c)
Num5(1,2,3)#1 2 3 是实参
  • 位置参数就是实参和形参一一对应

(2)关键字参数

def Num6(pet1,pet2):
    print('pet1的值为',pet1)
    print('pet2的值为', pet2)
Num6(pet2 = '黄毛',pet1 = '黑毛')
  • 发现在函数调用处,没有按照形参的顺序赋值!把参数名pet1和pet2作为关键字,交给函数进行赋值匹配—匹配操作交给解释器执行!

(3)默认参数

def anaiml(pet2,pet1='dog',pet3='lion'):  #此行代码已经给pet1进行赋值
    print('pet2的值为:',pet2)
    print('pet1的值为:', pet1)
anaiml('teger')
anaiml('teger','mouse') #  实参可以传递任意类型的对象
  • 备注;解释器不会去检查实参的类型
    #通过pet1的赋值,其实是将pet2的值给指定了一个位置或具体的值,这个值就称为函数参数的默认值!
    #但此操作不建议使用,因为在Python计数器解释的时候会将实参和形参很难区分
    ‘’’
    函数的:不定长参数
    1:为什么利用不定长参数?
    效率高,经常会用到
    ‘’’

    def getUsername(name,address,*zhh):  #  *  表示的是一个通配符,表示的是函数里面可以有多个不确定个数的形式参数
      print('用户的姓名是:',name)
      print('用户的家庭住址:',address)
      print('*zhh的数据类型是:',type(zhh))
      print(*zhh)
    getUsername('刘德华','九龙',12,'c')
    
  • 不定长参数的数据类型是元祖—元祖的特性:(‘12’,‘412’)

  • 一个*其实就是表示的是内存,----内存是谁开辟—元祖(元祖就是存放数据的集合)

    def getUsername(name,address,*zhh,**zheng):
         print('用户的姓名是:',name)
         print('用户的家庭住址:',address)
         print('*zhh的数据类型是:',type(zhh))
         print('*zheng的数据类型是:', type(zheng))
         print(zhh)
         print(zheng)
     getUsername('刘德华','九龙',12,age=12,data=1997,)
    
  • 两个** 在不定长参数里数据类型为 字典

  • 备注: ** 表示的是可以直接在函数调用处给函数直接赋值、并且直接定义实参,不需要在函数里定义形式参数,效率高!

  • 在python中,strings,tuples,numbers是不可更改的对象,而list,dict,set等则是可以修改的对象

    def fun(agrs):
      agrs= '范冰冰'
      print(agrs) #变量的具体值
      # 1 定义一个不可以改变----字符串
      str1 = 'hello'
      # 2 将这个字符串传递到fun()里
      fun(str1)
      # 3 判断是否改变
      print('str1的字符串的值为',str1)
    fun(12)
    
  • 说明:先执行函数里面的的参数值 agrs=’’ 如果有和函数匹配的值,那么打印输出,将抛弃函数定义的值

  • 备注:在可变对象操作里面,利用args[0]=‘hello’ 小标重新赋值! 再交给函数调用去调用执行


4.函数的返回值

重点内容:函数的返回值

print(‘hello’) #不属于返回值,只是属于打印输出

title: 比较2个数的大小

def zhh(x,y):
    if x>y:
        print(x)
        return x
    else:
        print(y)
        return y
print(zhh(12,15))

#调用函数 并且给函数里的形参赋值

return 和 print()区别

  1. 'return’表示的是返回客户端浏览器的一行数据

  2. print()表示的是只给客户端控制台打印输出结果,并非数据

  3. return返回的永远是一个程序所控制的一个数据结果集

  4. print()没有什么程序价值

  5. return 以后的代码不再执行,—目前无法解决

    def sum1(a,b):
    print(a)
    print(b)
    print(id(a))
    print(id(b))
    return a+b
    sum1(10,20)
    
  • 备注:在python里面return返回值的id地址可以是同一个!(当满足变量的值相同的时候,变量名称可以不同,这样的目的是节约空间 )

  • python里面的return可以返回海量的数据,但java不行

    def many(x,y):
      return x,y
    sum = many(12,24)
    sum2 = many(100,200)
    #用一个变量接收多个值,保存到元祖里
    print(sum)
    
  • 备注:return一次性可以返回多个值,保存到元祖里!不建议使用!

    def returnmany(x,y,z):
      return x,y,z
    sum3,sum4,sum5=returnmany(12,100,200)
    print(sum5)
    print(sum4)
    print(sum3)
    

#以上操作针对于数据量少的时候,建议使用,因为他满足位置参数的时候,数据一一对应关系


5.yield生成器

ef getNumber(n):
    i=0
    while i<=n:
        print('i的值为:',i)
        # return i #i执行完以后,结束程序不再进行
        i+=1
        yield i #表示的是将i或者一个变量看作生成器generator
#调用函数给n赋值,进行i>n的操作
print(getNumber(5))#打印输出
a = getNumber(5)#将一个函数值给一个变量a
#调用next()方法将生成器里的值按照由标的原理   ’一行一行读取‘
print(next(a)) #1次
print(next(a)) #2次
print(next(a)) #3次
print(next(a)) #4次
  • 重点:yield生成器的next方法可以返回多个值。 在Python里此方法返回多个值,独一无二的!

  • yield 的核心就是利用next 方法 和iter()----不建议使用,没有next方法高效

  • 因为上面这两个方法 最后都是返回一个**‘迭代器’对象**,next方法更接近于迭代器的迭代原理

  • yield 生成器for while 循环结合使用

    getNumber(5)
    a1 = (1,2,3,4,5)# 可以元祖 集合set  列表 字段
    it = iter(a1)
    print(next(it))#通过next方法打印输出**
    print(next(it))#通过next方法打印输出**
    

迭代器的作用和特性

  1. 通过iter()方法将数据从内存里面获取到!—获取到数据之后交给 next 方法去执行遍历结果集
  • 总结:现有iter()方法,再有next方法, iter()方法和内存数据有关系! next()方法和内存数据没关系
  • 所以通过next方法操作数据是安全的
  1. 迭代器有start开始 ----必须有end结束! 中途不能中断

6.全局变量&局部变量

   def test1():
    a = 100
    print('a的值为:',a)
    print('a的内存地址:',id(a))

   def test2(): #在test2中访问test1的常量a?
    a = 10
    print('test2的id',id(a))
    print('调用a',a) #test2的访问不了
    test1()
    test2()
  • 局部变量只能在自己定义的函数体里访问,不能通过第二个函数直接访问
  • 变量名称不一样—地址一样 地址不一样—变量名称一样
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狐 若

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值