python-笔记(四)函数
一、函数是什么?
函数一次来源于数学,但是编程中的【函数】的概念,与数学中的函数还是有很大的不同的,编程中的函数在英文中也有很多不同的叫法。
在Basic中叫做subroutine(子过程或子程序),在Pasacl中叫做procedure(过程)和funtion,在java中叫做method。
二、使用函数的好处:#函数即变量
1、简化代码
2、提高代码效率
3、代码可扩展
三、函数的定义:
定义函数的关键字是def,后面是函数名+(),函数名不能重复;调用函数:函数名+()
eg:
# def read_users(filename):#形参
# with open(filename) as fr:
# for line in fr:
# up = line.strip().split(',')
# s_username = up[0]
# s_pwd = up[1]
# all_users[s_username]=s_pwd
# read_users('a.txt')#调用参数叫做实参
# print(all_users)
四、函数在调用的时候,可以传入参数,有形参和实参
函数在调用的时候,可以传入参数,有形参和实参
形参:形参只有被调用的时候才分配内存单元,在调用结束后就是放所分配的内存单元,因此形参只在函数内部有效。
实参:
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,他们必须有确定的值,以便把这些值
传送给形参。函数调用结束返回主调用函数后则不能再使用该行参变量。
简单点说,形参就是函数接收的参数,实参就是实际传入的参数。
函数的四种参数:
1、位置参数:字面上的也就是按照参数的位置进行传参比如例子中的read_users函数种的filename,位置参数是必传的,
有几个位置参数在调用就必须传入几个参数,否则就会报错。那如果有多个位置参数的话,记不住那个位置穿那个参数了
怎么办,可以使用位置参数的名字来指定调用,这种调用方式叫做关键字传参
e.g:
def cal(x,y):
return x*y
cal(x=4,y=6)
2、默认值参数:
默认值参数就是在定义形参的时候,给函数默认赋一个值,比如数据库的端口这样的,默认给它一个值,这样就算你在调用的时候
没传入这个参数,他也是有值的
所以,默认参数不是必填参数,如果给默认参数传值的话,他就会使用你传入的值。如果使用默认值参数的话,必须放在位置参数
后面定义
e.g:
# def regit(name,age,sex='男'):#age,name必填参数,位置参数,
# # sex定义了一个默认值参数,非必传
# print('hello %s,age is %s,sex is %s'%(name,age,sex))
#
# regit('周杰伦','9090') 非固定参数:
位置参数和默认参数都是参数是固定的,如果一个函数,参数不是固定的,非固定参数分为:可变参数、关键字参数
如果4种参数都有的话,必须按照位置参数、默认值参数可变参数、关键参数的顺序接受否则报错
3、可变参数
可变参数用*来接收,后面想传入多个参数就传入多少个,可变参数也是非必填的
e.g:
# def post(*args):#可变参数,也叫参数组,参数不固定,也不是必填参数
# print(args)
# post('001','denglu','http://baidu.com','post','a=1')
# post('002','denglu')
#
# def other(name,age,country,*args):#接受的是元祖
# print(name)
# print(age)
# print(country)
# print(args)
# other('wubing','999','hehe','beijing','python')
4、关键字参数:
关键字参数**来接收,后面的参数也不固定的,想写多个多少个,当然也可以和上面的集中一起使用,如果一起使用的话,关键字参数必须在最后面
使用关键字参数的话,调用的时候必须使用关键字传参,关键字参数也是非必传的。 e.g:
def kw(**kwargs):
#关键字参数,接受的是一个字典,也不是必填的
#c传入字典的时候就得写**d
print(kwargs)
kw(name='wubing',age='18',sex='女')
# d={'name': 'wubing', 'age': '18', 'sex': '女'}
#
# kw(**d)
# kw() #
# def other2(name,country='China',*args,**kwargs):
# #如果必填参数、默认值参数和可变参数、关键字参数一起用的话
# #必须按照必填参数、默认值参数可变参数、关键参数的顺序接受否则报错
# print(name)
# print(country)
# print(args)
# print(kwargs)
# other2('wubing')
# other2('wubing','beijing','python','cahngping',user='niuhanyang')
五、函数的返回值
每个函数都有返回值,如果没有在函数里面指定返回值的话,在python里面函数执行完之后,默认会返回一个None,
函数也可以有多个返回值,如果有多个返回值的话,会把返回值都放到一个元祖里,返回的是一个元祖。
为什么要有返回值呢?是因为在这个函数操作完之后,它的结果的在后面的程序里里面需要用到。
函数中的返回值使用return,函数在遇到return就立刻结束。
def calc(x,y):
c =x*y
return c
resc = calc(5,6)
print(res) e.g:
'''
这个函数是判断传入的是不是小数
return True or False
param 传入一个字符串
'''
# def is_float(s):
# s = str(s)
# print(s)
# if s.isdigit():
# return False
# else:
# if s.count('.') == 1:
# sl = s.split('.')#按照小数点分割
# left = sl[0]
# right = sl[1]
# if left.startswith('-')and left.count('-')==1and right.isdigit():
# lleft= left.split('-')[1]
# if lleft.isdigit():
# return True
# else:
# return False
# elif left.isdigit()and right.isdigit():
# return True
# else:
# return False
# else:
# return False
# print(is_float('1.1'))
六、局部变量和全局变量
局部变量意思就是在局部生效的,出了这个变量的作用域,这个变量就失效了,比如上面的c就是一个局部变量,出了这个函数之后,就没有c这个值了
全局变量的意思就是在整个程序里面都生效的,在程序最前面定义的都是全局变量,全局变量如果要在函数中修改的话,需要加global关键字声明,如果是list、字典和集合的话,则不需要加global关键字,直接就可以修改。
# score3 ={'name':'adidas'}
# def my_open():
# #在函数里定义的变量叫局部变量,他只能在函数里面用
# #除了该函数外,就不能使用了
# #在函数外定义的变量叫做全局变量,在函数内也可以使用
# #如果变量在函数外和函数内都有定义那么函数内取值为函数内定义的变量值
# #如果想在函数里修改全局变量那么要先用global关键字声明
# #global要修改的是int,string类型必须得些global,如果是列表和字典不能加global
# fw = open('a.txt','a+')
# fw.seek(0)
# print(fw.read())
# score3['name'] = 'pppp'
# global score3
# score3['id']='1000'
#
# print(score3)
# my_open()
# # fw.read()
# print(score3)
# #函数及变量 七、递归调用
如果一个函数在内部调用自身本身,这个函数就是递归函数。递归调用的意思就是,在这个函数内部自己调用自己,就有点循环的意思。
# def hello():
# print('hello')
# hello()
#
# hello()
递归调用的特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出)
八、高阶函数
如果一个函数的入参是一个函数名的话,那这个函数就是一个高阶函数
# def add(x,y,z):
# return z(x)+z(y)
# print(add('99','121',int))
# 函数里面也可以嵌套的定义函数
# 函数的作用域:是就近原则,从里往外找,如果自己的函数里面有就拿来用,
# 如果自己的函数里面没有的话,就去他的父级里面找
# 函数只有调用才会被执行
e.g:
# name ='python'
# def warpper():
# name ='wubing'
# print('我在外面')
# def deco():
# name = '陈冬瓜'
# print('我在里面%s'%name)
# def hhh():
# name ='张莹'
# print('xxx%s'%name)
# hhh()
# deco()
# print('外面的name是%s' % name)
# warpper()
python-笔记(四)函数的更多相关文章
- Python:笔记(2)——函数与模块
Python:笔记(2)——函数与模块 Python函数 关于函数 1.我们可以使用Help来查看函数的帮助信息 2.调用函数的时候,如果传入的参数数量或者类型不符合均会报错. 3.函数名其实就是一个 ...
- python学习笔记(四):函数
一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...
- guxh的python笔记四:迭代
1,可迭代对象iterable,迭代器iterator,生成器generator 可迭代对象iterable: 实现__iter__方法的类.__iter__方法返回iterator或者generat ...
- python 基础(四) 函数
函数 一.什么是函数? 函数是可以实现一些特定功能的 小方法 或者是小程序 优点: 提高 了代码的后期维护 增加了代码的重复使用率 减少了代码量 提高了代码可读性 二.函数的定义 使用 def关键+函 ...
- python笔记之函数
函数 >>> def funTest(param1): ... 'this is function document string.' #正文需要有缩进 ... return par ...
- python笔记22-literal_eval函数处理返回json中的单双引号
前言 在做接口测试的时候,最常见的接口返回数据就是json类型,json类型数据实际上就是字串,通常标准的json格式是可以转化成python里面的对应的数据类型的 有时候开发返回的数据比较坑,不按常 ...
- python笔记4 - 函数
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.你已经知道Python提供了许多内建函数,比如print().但你也可以自己创建函数,这 ...
- Python笔记008函数(2)
1. 昨日内容回顾: def 函数(): 函数体 return 值 如果不写return,默认返回None.可以单独返回一个值,也能够以元组的形式返回多个值.(不要把print和retu ...
- python笔记四
#!/usr/bin/env python3 from datetime import datetime, timedelta # datetime是模块,datetime模块还包含一个datetim ...
- python笔记-字符串函数总结
字符串函数: chr() 数字转ASCII chr(96)="a" ord() ASCII转数字 ord("a")=96 isspace() 判断是否为空格 s ...
随机推荐
- MY SQL数据库密码最简单的一个方法()
https://zhidao.baidu.com/question/564368111.html 非常简单的一个修改方法!!!!!!!!!!!!!!!!!!!!! 最简单的方法就是借助第三方工具Nav ...
- C++ delete仍可访问的问题
C++ delete和置为NULL 先上一段代码: class Object { public: explicit Object(int num) : m_num(num){} void functi ...
- 什么情况下会出现undefined
1.函数定义形参不传值,2.预解释,只声明不定义时输出变量3.对象取属性值,属性值不存在
- editplus的使用技巧
数据库sql语句中的 in 后面需要 ('xx','bb')这样的结果,多的话修改起来就比较麻烦,这时候使用editplus 的替换功能就可以实现 ,顶部菜单的 搜索 - > 替换 或者 ctr ...
- Django之cookie 和session
---恢复内容开始--- 一.cookie 前戏.cookie 的由来 由于http协议是无状态的 无法记录用户状态 cookie就是保存在客户端浏览器上的键值对 工作原理:当你登陆成功之后 浏览器会 ...
- lilybbs-faq - linux入门以及百合 Linux 版精华区导读
QUESTIONS 问题与解答 不需要任何命令的简单介绍 历史 (APUE 提到了1990年之前的unix历史,还有各种标准 ANSI ISO IEEE posix xpg3.... 但是linux ...
- Linux日常之Ubuntu系统中sendmail的安装、配置、发送邮件
一. 安装 1. sendmail必须先要安装两个包 (1)sudo apt-get install sendmail (2)sudo apt-get install sendmail-cf 2. u ...
- Intelli IDEA快捷键(配合IdeaVim)(转)
Intelli IDEA快捷键(配合IdeaVim)(转) Intelli IDEA开发环境,个人总结的一些常用的快捷键. 想要使用vim方式编辑代码,可以使用Intelli IDEA的IdeaVim ...
- java web 增加信息课堂测试00
按照图片要求设计添加新课程界面.(0.5分)在后台数据库中建立相应的表结构存储课程信息.(0.5分)实现新课程添加的功能.要求判断任课教师为王建民.刘立嘉.刘丹.王辉.杨子光五位教师的其中一位.(0. ...
- win10系统迁移到新的硬盘
笔记本换个硬盘,但是程序员在开发中需要各种环境配置,不想重装系统,重新系统容易,但是装各种软件和配各种环境就比较麻烦了,所以笔记本加固态硬盘,可以不用重装,直接"系统迁移"到新的硬 ...