Python编程快速上手(第二章函数)

def函数

def定义一个函数
包含

  1. def关键字
  2. 函数名
  3. 括号()函数都需要一个括号
  4. 参数 括号的内参数
  5. 冒号
  6. 下一行开始,缩进的代码块

  def an() :              #自定义的函数
     print('你好!')        #函数的内容
  an();                   #调用函数
  an();                   #调用函数

参数的调用

  def an(ac) :          # 自定义的函数ac为变量,再此称为变元
    print('你好!' + ac) # 函数的内容
  an('先生')           # 函数调用,是的参数为 先生,变量ac设置为 先生 输出

定义,调用,传递,参数,变元

定义:一个函数就是创建一个函数,def an(ac)创建了一个an()的函数
调用:调用刚才创建的函数,并将执行转到函数代码的开始处
传递:an(‘先生’)将字符串‘···’传递给该函数
参数:被传递过来的字符串‘···’就是参数,参数被赋给名为ac的局部变量
变元:接收参数赋值的变量是变元,变元只有该函数使用,在函数放回就丢失,试图在别的不相关的函数使用改变元(空的),会报错
返回值和return语句
返回值:函数调用求值的结果,例:len(“hello”)返回值为整数5
在用def语句创建时可以,可以用return语句指定放回什么值,
包含以下部分
1.return关键字
2.函数应该返回值或表达式(使用表达式就是返回表达式求值的结果)

from random import *
def computernum(num):    #变元
    if num == 1:
       return '你好我是1'   #指定返回值
    elif num == 2:
       return '你好我是2'   #指定返回值
    else:
       return '你好我是3'   #指定返回值
num2 = randint(1,3)      #随进输出1-3
print(computernum(num2)) #输出指定的返回值

None值

在python中有一个值称为None,表示没有值,None是NoneType数据类型的的唯一值。首字母必须大写。几乎所有的函数都需要返回值,print()函数的返回值就是None

  num = print('hello')
  print(None == num)

关键字参数和print()函数

大多数参数是由它们在函数调用中的位置来识别,例如: random.randint(1,10)与random.randint(10,1) 不同
函数调用前一条将放回1-10之间的随机整数,第一个参数是范围的下界,第二个是参数的上界,第二条则错误
关键字参数是在函数调用它们前面的关键字来识别,关键字参数通常是用于可选变元,例: print()函数有可选变元end和sep,分别指定在参数的末尾输出什么,以及在参数之间输出什么来隔开它们。

 print('hello')                #输出hello
 print('word')                 ##输出word
 print('hello' ''  'word')     #输出helloword,空格和空字符被忽略了
 print('hello',end='')         #输出helloword ,print自动在字符串的末尾添加了换行符
 print('word')                 #end参数将换行符换成了空字符,就在同一行显示了
 print('hello','word')         #print函数遇到多个字符串值,会自动用空格把值分开
 print('hello','word',sep='1') #sep参数指定某个字符来代替空格,分割字符串

调用栈

调用栈是python记住每个函数调用在哪里返回执行的方式
python的后台在处理它,当程序在调用一个函数是,Python在顶部创建一个帧对象,帧对象保存了最初函数调用的行号,且在前一个帧对象之上,当函数值返回时,python从栈顶部删除一个帧对象,并将执行转换至保存在其中的行号,帧对象始终是从栈的顶部添加或删除。

 def a():                 #创建一个函数
     print('程序开始')     #函数函数
     b()                 #调用函数b,b()函数的放回值会被执行到这里
     print('结束')       #函数结尾
 def b():               #创建另一个函数
     print('程序执行中') #放回一个输出值
     a()               #调用函数

局部变量和全局表量

一个变量必须属于以下一种
局部变量:函数内被调用的变元和变量,处于该函数的局部作用域中
全局变量:函数之外赋值的变量,处于全局作用域中
作用域:变量的容器,当作用域被销毁时,所有保存在该区域内的变量值被丢弃,只用一个全局的作用域,在程序开始时创建,程序停止时被销毁,它的所有变量被丢弃,否则程序在下次执行还还记得它们上次运行的值
一个函数被调用就创建了一个局部作用域,在这个函数内所有的赋值的所有变量,存在与该局部作用域内,改函数返回时,这个局部作用域就被注销,这些变量就丢失了,下次调用这个函数,局部变量不会记得该函数上次被调用时它们保存的值
作用域的几个要点
1.全局作用域中的代码不能使用任何局部变量
2.局部作用域中的代码可以访问全局变量
3.一个函数的局部作用域中的代码,不能使用其他局部作用域的变量
4.在不同的作用域中,你可以用相同的名字命名不同的变量,一个num变量可以在局部变量使用,也可以在全局变量中使用同样的变量名。
python设计了不同的作用域,而不是所有的变量都使用全局变量,当特定函数调用中代码来修改变量是,该函数与程序其他部分的交互只能通过它的参数和返回值进行,缩小了可能导致bug的代码作用域。在出现时能就能很快知道是哪一个函数中代码出错。

局部作用域

  def a():        #创建一个函数
   --num = 1       
   --print(num)
   a()            #调用
   print(num)     #报错,局部变量不嫩在全局作用域内使用

局部作用域 一个函数中的局部变量要完全与其他的函数中的局部变量分隔开来

   def a():     #创建一个函数
     num = 1    #变量赋值
     b()        #调用函数b()
     print(num) #输出变量
   def b():     #创建另一个函数
     num = 2    #变量赋值
     a()        #调用函数a()

全局变量可以在局部作用域中读取

 def a():        #创建一个函数
     print(num)  #输出变量值
   num = 1       #给全局变量赋值
   a()           #调用函数a()

名称相同的局部变量和全局变量

   num = 3      #num全局变量
   def a():          
     num = 1    #num局部变量
     print(num)
   def b():         
     num = 2    #num局部变量
     print(num)
   a() 
   b()
   print(num)

三个独立的变量都有相同的名字,追踪某一个时候在使用那个变量,可能很比较麻烦

   # 在一个局部变量中修改一个全局变量的值
   num = 0        #变量赋初值
   def a():
     global num   #使用global语句指定num为全局变量
     num = 1      #修改了全局变量num的值
   a()
   print(num)

global语句(在一个函数内修改全局变量)

四条法则区分作用域

1.如果变量在全局作用域中使用(即在所有函数之外),它就是全局变量
2.如果在一个函数中,有针对该变量的global语句,他就是全局变量
3.如果该变量用于函数中的赋值语句,该函数就是局部变量
4.如果改变量没有用在赋值语句中,它就是全局变量

   num=0            # 全局变量
   def a():
     global num     # 全局变量
     num = 1
   def b():
     num = 2        # 局部变量
   def c():
     print(num)   # 全局变量,这个语句中既没有赋值语句,也没有针对它的global语句

在函数中,如果试图在局部变量赋值前使用就使用它会报错

  # 无法执行的程序
  num=0            # 全局变量
   def a():
     print(num)    #!!!报错!!!!函数的子句中有针对num的赋值语句,认为函数是一个局部变量不会退回使用之前的全局变量
     num = 1       #在执行输出前局部变量num不存在
   a()
   #无法执行的程序
   num=0
   def a():
     print(num)    #!!!报错!!!!函数的子句中有针对num的赋值语句,也被指定为全局变量了但是,不能在全局声明之前使用
     global num
     num = 1
   a()
 # 实验三
   num=0             #全局变量
   def a():
     global num    #指定为全局变量
     print(num)     #函数的子句中有针对num的赋值语句,设定了num为全局变量,在使用赋值
     num = 1        
   a()

try和except异常处理

将可能出错的语句放在try语句的子句中,如果发生了错误,程序执行就转到except的子句开始处,不会在回到try子句中

 while True:               
    try:                       #错误捕捉语句
    num = input('请输入密码:')  #输入不能装换为整型的字符串,在下一行报错
    if int(num) == 123456 :   #字符型和整型无法做比较,报错
      break                  #输入正确跳出循环
    except:                  #当输入不能装换为整型的字符串,被try语句捕捉
      print('输入不正确')     #程序跳转到except语句的子句开始处
  print('验证成功')          #提示跳出循环了

总结

1.函数减少了重复的代码,让程序更加简短,容易阅读,修改
2.函数是代码逻辑分组的组成方式
3.函数中的代码块在函数被调用时执行,而不是定义函数的时候
3.在调用一个函数时最少有一个局部作用域和一个全局作用域
4.当函数返回值后,局部作用域内的变元保存的值被销毁
5.在觉得会出现错的的代码块放进try语句中…

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值