函数

  如果在开发程序时,需要某块代码多次,但是为了提⾼编写的效率以及代码的重⽤,所以把具有独⽴功能的代码块组织为⼀个⼩模块,这就是函数

函数的定义

  函数定义的三种方式:无参函数,有参函数,空函数

#无参函数
def demo_print():
print('hello') #有参函数
def add(x,y):
print(x+y) #空函数
def foo(x,y):
pass

函数调用

  调⽤函数很简单的,通过函数名() 即可完成调⽤:demo_print()

  函数使用的原则是:先定义,再调用

函数的注释

def demo_ano():
'''
注释
'''
print('-------')

  使用help(demo_ano)可以看到函数的相关说明

函数参数

  形参与实参:形参即变量名,实参即变量值,函数调用时将实参赋值给形参 

def add(a,b):
s=a+b
return s add(1,2)
#(a,b)为形参,(1,2)为实参

  位置参数:按照从左到右的顺序定义的参数

def add(num1,num2):
s=num1+num2
return s add(5,6) (num1,num2)为位置形参,(5,6)为位置实参

  关键字参数:按照key=value的形式定义的参数

def login(name,pwd):
if name=='luoli' and pwd=='':
print('Login Sucess')
else:
print('Login failed') login(pwd='',name='luoli')

  默认参数:形参在定义时就已经为其赋值

def add(a,b=3):
s=a+b
print(s) add(3)
add(5,10) 默认参数只在定义时赋值一次,可以传值,也可以不传值,默认参数的定义应该在位置参数的右边,默认参数通常定义成不可变类型

  可变长参数:可变长指的是实参值得个数不固定,实参位置实参和关键字实参两种,针对这两种形式的可变长参数,形参有对应的两种方式来存放它们,即*args和**kwargs

  *args

def foo(x,y,*args):
print(x,y)
print(args) foo(1,2,3,4,5) def foo(x,y,z):
print(x,y,z) foo(*[1,2,3])

  **kwargs:必须按照key=value的方式赋值

def foo(x,y,**kwargs):
print(x,y)
print(kwargs) foo(1,2,z=3,p=4,q=5) def foo(x,y,**kwargs):
print(x,y)
print(kwargs) foo(**{'z':1,'x':2,'y':4})

  *args,**kwargs:对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的

  命名关键字参数:*后定义的参数,必须被传值(有默认值的除外),且必须按照关键字实参的形式传递

def foo(x,y,*args,a=1,b,**kwargs):
print(x,y)
print(args)
print(a)
print(b)
print(kwargs) foo(1,2,3,4,5,b=3,c=4,d=5)

函数返回值

  所谓“返回值”,就是函数中程序完成后,最后给调⽤者返回的结果,如果想要使用这个结果,那么就需要保存该返回值

def add(a,b):
return a+b res=add(1,2)
print(res)

函数类型

  无参数,无返回值

def demo_print():
print('test') demo_print()

  无参数,有返回值

import time
def get_time():
current_time=time.time()
return current_time res=get_time()
print(res)

  有参数,无返回值

  此类函数,能接收参数,但不可以返回数据,⼀般情况下,对某些变量设置数据⽽不需结果时,⽤此类函数

  有参数,有返回值

def add(a,b):
return a+b res=add(100,200)
print(res)

练习

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

def modify_file(source_file,old,new):
import os
with open(source_file,'r',encoding='utf-8') as read_f,\
open('.bak.swap','w',encoding='utf-8') as write_f:
for line in read_f:
if old in line:
line=line.replace(old,new)
write_f.write(line)
os.remove(source_file)
os.rename('.bak.swap',source_file)

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

def count(charac):
d={
'num':0,
'str':0,
'space':0,
'others':0,
}
for i in charac:
if i.isdigit():
d['num']+=1
elif i.isalpha():
d['str']+=1
elif i.isspace():
d['space']+= 1
else:
d['others']+=1
return d
#res=count('hello123 hh ****')
#print(res)

  (3)写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5

def my_len(model):
i=len(model)
if i > 5:
print('%s长度大于5'%model)
else:
print('%s长度小于5'%model) # my_len([1,2,3,4,5,6])
# my_len('sdf')

  (4)写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

def li_len(li):
if len(li)>2:
li=li[0:2]
return li res=li_len([1,2,3,4])
print(res)

  (5)写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者

def mod_odd(mod):
mod=mod[::2]
return mod res=mod_odd([1,2,3,4,5])
print(res)

  (6)写函数,检查字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者

def di_len(di):
for k,v in di.items():
if len(v) > 2:
di[k]=v[0:2]
return di dic = {"k1": "v1v1", "k2": [11,22,33,44]}
res=di_len(dic)
print(res)

 

第三章 Python函数的更多相关文章

  1. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  2. javascript进阶课程--第三章--匿名函数和闭包

    javascript进阶课程--第三章--匿名函数和闭包 一.总结 二.学习要点 掌握匿名函数和闭包的应用 三.匿名函数和闭包 匿名函数 没有函数名字的函数 单独的匿名函数是无法运行和调用的 可以把匿 ...

  3. 第二章----python函数

    第一节:调用函数 1.函数是什么? 函数是组织好的,可以重复利用的. 2.为什么要用到函数? 提高应用的模块性,提高重复利用率.指的是:多个文件中可能都要用到该函数,直接拿来调用就行,不用在重复写一个 ...

  4. python第三章:函数

    在前面章节中,介绍了一些input(),print(),len()等内建函数,还有random,math等标准库相关函数,这些都是可以直接使用的,但是很多时候,我们也是可以编写自己的函数. 看个例子: ...

  5. Python自学:第三章 使用函数sort( )对列表进行临时排序

    # -*- coding: GBK -*- cars = ["bmw", "audi", "toyota", "subaru&qu ...

  6. 第三章 Python容器:列表、元组、字典与集合

      数据结构的分类依据?基本的"数组"在python中是列表, 数据结构的作用?容器,盛放数据,是由原子组成的分子.可以将一群数据进行整合.拆分.重排. 3.2 列表 列表是啥?顺 ...

  7. 第三章 Python 的容器: 列表、元组、字典与集合

    列表是Python的6种内建序列(列表,元组,字符串,Unicode字符串,buffer对象,xrange对象)之一, 列表内的值可以进行更改,操作灵活,在Python脚本中应用非常广泛 列表的语法格 ...

  8. 第三章 python数据规整化

    本章概要 1.去重 2.缺失值处理 3.清洗字符型数据的空格 4.字段抽取 去重 把数据结构中,行相同的数据只保留一行 函数语法: drop_duplicates() #导入pandas包中的read ...

  9. 《Python核心编程》 第三章 Python基础 - 练习

    创建文件: # -*- coding: gbk -*- #! /auto/ERP/python_core/chapter ''' Created on 2014年5月21日 @author: user ...

随机推荐

  1. JS 马托货物

    大马驮2石粮食,中马驮1石粮食,两头小马驮一石粮食,要用100匹马,驮100石粮食,该如何调配? <!DOCTYPE html> <html> <head> < ...

  2. Ajax技术实战操练课堂学习笔记

    ajax是什么 ? ajax(asynchronouse javascript and xml) 异步的javascript 和 xml 是7种技术的综合,它包含了七个技术( javascript x ...

  3. VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址

    转载地址: https://blog.csdn.net/gebitan505/article/details/58166055 VUE 利用 webpack 给生产环境和发布环境配置不同的接口地址 前 ...

  4. String类常见的方法

    类String public final class String extends Object implements Serializable, comparable<String>, ...

  5. Inflation System Properties

    https://blogs.oracle.com/buck/inflation-system-properties I wanted to write a quick post about the t ...

  6. BA--步进电机工作原理

    步进电机是将电脉冲信号转变为角位移或线位移的开环控制元步进电机件.在非超载的情况下,电机的转速.停止的位置只取决于脉冲信号的频率和脉冲数,而不受负载变化的影响,当步进驱动器接收到一个脉冲信号,它就驱动 ...

  7. NHibernate之旅(18):初探代码生成工具使用

    本节内容 引入 代码生成工具 结语 引入 我们花了大量的篇幅介绍了相关NHibernate的知识.一直都是带着大家手动编写代码,首先创建数据库架构.然后编写持久化类和映射文件,最后编写数据操作方法.測 ...

  8. xml与json格式互转

    最近要整一些报文测试的事情,可当前项目的请求报文格式却不统一,有XML也有JSON,为了一致性,决定统一用JSON格式处理. xmltodict : Makes working with XML fe ...

  9. STM32F030, 使用嘀嗒定时器Systick实现LED闪烁

    本文主要解决两个问题 1 STM32的IO口要反转,怎么实现? 2 嘀嗒定时器systick的配置 解答1: 单片机的口,反转非常easy.sbit led = P1 ^6;  led = ~led; ...

  10. [Tomcat]Tomcat安全设置

    1.关闭服务器端口:server.xml默认有下面一行: <Server port="8005" shutdown="SHUTDOWN"> 这样允许 ...