Python全栈-day8-day9

Posted 燕云十八骑_Z

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python全栈-day8-day9相关的知识,希望对你有一定的参考价值。

函数

day8

1.为什么需要函数

  1)代码的组织结构不清晰,可读性差

  2)需要重复使用某个功能时,需要重新编写成程序,重复率高

  3)多处引用相同代码时,需要扩展功能的时候过于麻烦,工作量大

2.函数的定义

  函数,类似于将某些特定的功能的代码打包起来,当需要用的时候直接拿来用,避免重新定义或者编写,例如Python内置的很多方法就是一个个已经打包好的函数,需要的时候直接拿来用,无序自己再打包定义一次

3.函数的分类

  如上描述的,Python中内置存在的函数称为内置函数,而我们在编写程序的过程中,出于自身 的需求自己定义的函数称为自定义函数

4.函数的使用

  遵循规则:先定义再调用

  1)实现

# 语法
# 函数名应该尽可能的体现函数实现的功能
def 函数名(参数1,参数2....):
    ‘‘‘
    注释,描述函数的功能
    ‘‘‘
    函数体
    return 返回值
# 函数定义举例
#
定义 def max(x,y): ‘‘‘ 比较两个数的大小 ‘‘‘ if x > y: print(x) else: print(y) return x # 调用 max(10,20)

注意:

  函数即‘变量’,在调用之前必须先定义,再调用,否者会报错

  2)定义函数的三种形式

    a.无参函数

def func():
    print(我只是个简单的函数....)

    b.有参函数

      如上定义的比较两个数大小的函数,调用时必须传入参数,否则报错

    c.空函数

      无任何实际执行函数体的函数

def func():
    pass

  3)函数的调用

    a.函数调用的名字

    b.根据名字调用代码,调用时函数名后必须加括号,且有参数时必须传入参数

  4)函数的返回值

    可返回多个值,且返回类型不限,如不写默认返回None

什么时候该有返回值?
    调用函数,经过一系列的操作,最后要拿到一个明确的结果,则必须要有返回值
    通常有参函数需要有返回值,输入参数,经过计算,得到一个最终的结果
什么时候不需要有返回值?
    调用函数,仅仅只是执行一系列的操作,最后不需要得到什么结果,则无需有返回值
    通常无参函数不需要有返回值

  5)函数调用的三种形式

    a.语句形式  func()

    b.表达式形式  4*len(ditc)

    c.用函数作为另一个函数的传入参数  func(max(10,1))

day8练习:

  1)写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成批量修改操作

def change_txt(file,old_data,new_data):
    with open(r%s %file,rt,encoding=utf-8) as f_1:
        data = f_1.read()
        data = data.replace(old_data,new_data)
    with open(r%s %file,wt,encoding=utf-8) as f_2:
        f_2.write(data)

file = input(输入要修改的文件名>>).strip()
data_1 = input(要修改的内容>>).strip()
data_2 = input(修改后的内容>>).strip()
change_txt(file,data_1,data_2)

  2)写函数,计算传入字符串中数字、字母、空格以及其他的个数

def count(msg):
    num_count = 0
    letter_count = 0
    blank_count = 0
    other = 0
    for i in msg:
        if i.isdigit():num_count += 1
        elif i.isalpha():letter_count += 1
        elif i.isspace():blank_count += 1
        else:other += 1
    print(数字个数:%s % num_count)
    print(字母个数:%s % letter_count)
    print(空格个数:%s % blank_count)
    print(其他:%s % other)

msg_inp = input(输入字符串>>)
print(len(msg_inp))
count(msg_inp)

day9

1.函数的参数

  分为两大类:形参和实参

  1)形参:即便变量名,定义函数时括号内的变量即为形参

  2)实参:即变量值,调用函数时绑定在变量名上,函数结束后解除绑定

2.参数应用

  根据调用的方式又可分为几大类:

  1)位置参数:括号内从左到右,按顺序一一对应

def func(x,y,z):
    print(x,y,z)
# 对应于xyz分别为1、55、22
func(1,55,22)

  2)关键字参数:key=value形式

def func(x,y,z):
    print(x,y,z)
# xyz的位置不固定
func(x=1,z=55,y=22)

  3)默认参数:在函数定义时赋予值,调用时如无重新传入的值则默认值不变

def func(x,y,z=33):
    print(x,y,z)
# 默认值不变
func(x=1,y=22)

  4)可变长参数

    指传入参数的个数不固定,而实参有按位置和按关键字的两种形式定义,针对这两种形式的可变长,形参对应有两种方法解决:*args和**kwargs

  *args    

    a.*会将溢出的!!!位置实参!!!全部接收,然后保存成元组的形式赋值给args

def func(x,y,z,*args):
    print(x,y,z)
    print(args)
func(1,2,3,4,[1,2,2,5,],{name:zhang})

    b.一旦实参前有* ,则把形参打散成多个参数

def func(x,y,z):
    print(x,y,z)
func(*[1,2,2])      # *[] 把列表内的元组打散成三个参数
# func(*[1,2,2,‘ss‘])     # 报错,打散后为四个参数,原函数只有三个形参
# func(*[1,2,])     # 报错

  **kwargs  

    a.**会将溢出的!!!关键字实参!!!全部接收,然后保存成字典的形式赋值给kwargs

def func(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)
func(x=a,y=z,z=sss,ss=4444,sss=888)

    b.一旦碰到实参前加**,就把该实参的值打散

def func(x,y,z,**kwargs):
    print(x,y,z)
    print(kwargs)
func(1,2,3,**{name:zhang,age:18})

  混合使用

# 位置式参数以元组形式赋值给args
# 关键字参数以字典形式赋值给kwargs
def wapper(*args,**kwargs):
    print(args)
    print(kwargs)
wapper(12,12,545,488,66,a=555,sss=555)

注意:

  *args针对的位置实参,**kwargs针对的关键字实参

 


以上是关于Python全栈-day8-day9的主要内容,如果未能解决你的问题,请参考以下文章

全栈编程系列SpringBoot整合Shiro(含KickoutSessionControlFilter并发在线人数控制以及不生效问题配置启动异常No SecurityManager...)(代码片段

2017-12-19python全栈9期第四天第二节之列表的增删改查之切片

2017-12-19python全栈9期第四天第二节之列表的增删查改之按切片删除

2018-5-22-Python全栈开发day9-Python开发课程简介part2

2018-5-21-Python全栈开发day9-Python开发课程简介part1

2017-12-20python全栈9期第五天第二节之字典的增删查改和字典的for循环