python 知识点6

知识点6--函数


函数:


1 函数的引出:


函数概述:在一个完整的项目中(假设有大量代码),


会有大量需要重复使用的代码,


可以将这些重复的代码写成一个函数,


当我们重复使用的时候,直接调用就可以




本质:代码的封装


优点:1.极大的简化了代码,提高了复用性


      2.当代码需要添加或者修改功能(bug)时,只需要去对应位置修改即可
 
格式:


def 函数名(参数1,参数2,....):
语句块
return 结果/表达式


      1.定义一个函数需要用def关键字开始


      2.函数名是给该函数取一个名(自定义),
        函数名遵循标识符命名规则


      3.函数名后面跟的是(),()中用来放参数列表
        当参数列表为空时,()不可省略


      4.参数列表可以有多个,也可以没有
        参数列表中的参数是用来接收参数的
        这些参数就是变化的量


      5.()后需要跟上:,冒号表示函数体的开始
         函数体需要用tab缩进来表示范围


      6.语句块--就是需要重复使用的代码


      7.return:  1 用来返回一个结果/表达式,返回的值是用来告诉调用者


                  2 return可以省略,省略就表示不需要返回结果,
                    注意:如果没有写return,默认会执行return None


                  3return可以用来终止函数,函数默认是函数体执行完后自动终止




例子:计算器  
a = 1        其中a跟b是可变化的
b = 1
c = a + b
print(c)


def add(a,b):
c = a + b
return c




例子:def printFozu():







调用格式:


函数名(参数1,参数2,......)


1. 函数名是需要调用的函数的函数名(名字必须一致) printFozu   add


2. 函数名后跟(),()中放置需要传递给定义函数的参数(实际参数) 1跟1


3.()可以是空参,即使是空参,()也不能省略




本质:实际参数赋值给形式参数的过程,形式参数指的a跟b




调用例子:


print Fozu()




print(add(2,3))


案例一:


简单的函数


注意:函数需要先定义再使用


需求:通过函数来打印一个语句


定义了函数是不执行的


printStr 出现在函数前面是报错的


def printStr():
print("wen is a nice man")

print("wen is a handsome man")

print("wen is a good man")


#假设第一次调用
printStr




#假设第n个地方调用
printStr()






三   函数的参数:


需求:定义一个函数用来输出姓名,年龄


定义函数的地方,参数名叫形式参数。只定义了函数的名字,没有具体值


调用的时候,实际参数赋值给形式参数的过程


相当于形式参数name = 实际参数name 同时 实际参数 = "死胖子"


def printNameAndAge(name,age):
        
print("%s的年龄是%d"%(name,age))#这里的name代表的是形式参数


调用
printNameAndAge("金三胖胖",32)




name = "死胖子"
age = 34


调用函数的位置,传入的参数叫实际参数
printNameAndAge(name,age)






注意:调用函数时,传入参数的个数需要与定义函数参数的个数一致
                            
printNameAndAge("三胖子")显示报错缺一个参数


注意:调用函数时,传入参数的顺序需要与定义时一致,


printNameAndAge(78,"三胖子")#虽然不报错,会但顺序错乱






五  函数的返回值


需求:定义一个函数,求两个数的和


# 1.return会将一个结果返回,结果会作为调用者的返回值


  2.return 可以不写,不写时默认执行return None,


  3.return后也可以跟表达式,如果是表达式,会先执行表达式,
                            然后将表达式结果返回


  4.注意:return可以用来终止函数的执行,
          执行return后,后面的语句不会执行


def add(a,b):
c = a + b
return c
print("你已经成功计算出结果")
调用
res = add(100,101)
print(res)


 


例子:
for i in range(10):
print("哈哈",i)    return可以用来终止函数,函数默认是函数体执行完后自动终止
return




6 函数的值传递问题


不可变类型,只改了上面,下面不改


def editNumber(number):
number = 90
print("number的值为:%d"%(number))  number的值为90


num = 100
editNumber(num)


#在看自己的成绩
print(num)
                                                        结果100








注意可变类型:一改全都改


def editNmaes(listName):
listName[0] = "马伊琍"
print(listName)




names = ["马蓉","马化腾","马赛克","马云","马克思"]


editNames(names)
print(names)


最后显示为:


["马伊琍","马化腾","马赛克","马云","马克思"]




["马伊琍","马化腾","马赛克","马云","马克思"]






7 函数的关键字


sorted(reverse=True)


需求:定义一个函数,打印姓名,年龄,爱好


def printPerson(name,age,likes):
print("name:%s"%(name))
print("age:%的"%"age")
print("likes:%s"%likes)
printPerson(age=18,name="马蓉"likes=["马赛克","马云","宋喆"])




printPerson(age=18,name="马蓉",["马赛克","马云","宋喆"])






printPerson(["马赛克","马云","宋喆"],age=18,name="马蓉",)  #报错的




注意,关键字参数需要写在参数列表的后面,
      非关键字参数需要写在所有关键字参数前


      关键字参数的关键字名就是形式参数的变量名


printPerson("马蓉",likes=["马赛克","马云","宋喆"],age=18)








8 默认值参数


需求:打印某人的姓名,年龄,性别,爱好,身高


def printPerson(name,age,gender,likes,heigth):


print("name=%s,age=%d.gender=%s,heigth=%d"%(name,age,gender,heigth))


printPerson("金三胖胖",36,"不明"160)




printPerson("金三胖胖",36,160)


定义函数的时候可以在参数列表的后部给参数设置默认值


def printPerson(name,age,likes,heigth=179,gender="男"):


print("name=%s,age=%d.gender=%s,heigth=%d"%(name,age,gender,heigth))


printPerson("金三胖胖",36,"不明"160)


注意:在给函数传递参数的时候,默认值可以不传递
      会自动的设置成默认值


如果设置了默认值,同时又传递了该参数,则实际传递的值优先级高


printPerson("金三胖胖",36,160)




9 不定长参数 重点


不定长参数: 一个参数表示多个值  一般用 *args
  max(12,23,34,34,...)


需求:求多个数的和


#def addMoreNumber(num1,num2.........):




def addMoreNumber(*args):
print(args)


print(type(args))    元组


        for i in args:
        print(i)




用*表示的变量,用来接收任意多个没有命名的变量,


   会将这多个变量封装成元组,并传递到函数中


   如果没有参数,会是一个空的元组


最好将可变长参数放在列表的后面


#调用


  addMoreNumber()
 
  addMoreNumber(12)


  addMoreNumber(12,23)


  addMoreNumber(12,3,4,56)








def addMoreNumber(name,*args):
print(args)


print(type(args))    元组
        print("name=%s"%(name))


        for i in args:
        print(i)


  addMoreNumber(12,3,4,56,"name=胖胖胖")




  addMoreNumber("胖胖",12,3,4,56)






# 完成 求任意多个数的和


   def sum(*args):
       count = 0
       for i in args:
            count += i
       return count
   print(sum(1,2,3,4))






def addMoreNumber(name,*args):
pass






用**表示的参数,用来接收任意多个有命名(key-value)的参数,
会自动将多个参数封装成字典,
参数名作为key,值作为value


如果没有命名的参数传递,则会生成空的字典


def func(**kwargs):
print(kwargs)
        print(type(kwargs))
for key,value in kawargs.items()




测试
    func()
    func(age=10,name="小灰灰")




定义一个通用函数,关键字参数要放在后面


def function(*args,**kwargs):
pass


function(34,23,34,name="hello",age="18")#关键字参数要放在后面








9 匿名函数
了解


bind(函数名)


#def add(a,b):
# return a+b


lambda  表达式:


格式:   lambda 形式参数1,形式参数2:结果表达式


#bind(lambda a,b:a+b)


add = lambda a,b:a+b
 
print(add(1,2))






10 偏函数


需求:将一个字符串数字转换为数字


print(int("10"))


将一个字符串表示的二进制数转换为十进制,默认使用的是十进制


print(int("10",base=2))    1*2**0+0*2**1
2
print(int("1010",base=2))  1*2**0+0*2**1+1*2**2+0*2**3
10




def int2(str)
return int(str,base=2)


print(int2("1010"))
print(int2"10")






import functools


偏函数,参数1为需要修改的函数名,参数2为需要设置的默认值
func = functools.partial(int,base=2)   func相当于int
func("1010")
print(func("1010"))






一个py文件是一个模块,一个项目里有很多个py文件

12变量的作用域


作用域:变量的使用范围


注意:程序中的变量不是在任何地方都可以使用的


      使用的范围是由定义的范围确定的


注意:在python中,只有模块,类,函数会引入新的作用域


      while,for,elif,,if不会引入新的作用域


#number = 99
def editNumber():
#pass
number = 100
print(number)
number = 99
editNumber()
print(number)




在函数外面不能使用函数里面定义的变量


def editNumber():
num = 100     报错
print(num)




if True:
num=100
print(num)




if False:
num=100
print(num)             会报错






13 全局变量


num = 100
def editNum():
global num    #申明num是全局变量
num = 99
print(num)
editNum()
print(num)




14异常处理


当程序遇到问题(异常)的时候,不直接结束程序(崩溃)
而让程序越过该错误,继续执行


格式1:
try:
可能出现异常的代码
except 异常类型 as e:
处理






try:
res = 5/0
print(res)
print(num)
except ZeroDivisionError as e:
print("ZeroDivisionError异常被抛出了")
except NameError as e
print("NameError异常被抛出了")


print("代码结束了")






注意:可以全部抛出,    抛出任何类型的异常


try:
res = 5/0
print(res)
print(num)


except:
print("抛出异常")#代表抛出任何类型的所有异常
print("代码结束了")






格式2


finally:无论程序是否出现异常,始终会执行该代码块


         


try:
count = 5/0
print(count)


except ZeroDivisionError as e:
print("ZeroDivisionError异常被抛出了")
finally:
代码块






















































  














                                                       































































































































































































猜你喜欢

转载自blog.csdn.net/jiangwei1102/article/details/79055578