一.函数

函数的概念:对功能或者动作的封装可以帮我们把一段公共的代码提取出来

语法如下

def 函数名(形参):
函数体
函数名(实参) # 函数名()
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy") yue() # 执行一次函数
print("休息休息")
yue() # 再来一次
print(yue)

二.函数的返回值
return, 终止函数的运行
1. 函数内部不写return, 默认在最后返回None
2. 函数只写了return 返回None
3. return 值 有一个返回值
4. return 值1, 值2, 值3 .... 有多个返回值
返回值返回给调用方

例一
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
ret = yue()
print(ret)
例二
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
return
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
例三
def yue():
print("1. 打开手机")
print("2. 打开陌陌")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
return "漂亮的小姐姐" # 返回到哪儿了???? 谁调用的就返回给谁
例四
def yue():
print("1. 打开手机")
print("2. 打开微信")
print("3. 找个漂亮的小姐姐")
print("4. 探讨一下人生")
print("5. 一起出来happy")
return "漂亮的小姐姐","大妈", "大爷", "鲜肉" # 返回到哪儿了???? 谁调用的就返回给谁
ret = yue() # ('漂亮的小姐姐', '大妈', '大爷', '鲜肉')
print(ret)

三.函数的参数(一部分)
形参: 在函数声明位置的变量
1. 位置参数2. 默认值参数

def regist(id, name, age, gender="男"): # 从语法上讲. 不允许, 从代码运行也不允许
print(id, name, age, gender)
regist(3, "王大锤", 20)
regist(4, "李鸿洁", 18, "女")

3. 混合参数  位置参数, 默认值参数
4. 动态传参, *args, **kwargs
实参: 在函数调用的时候给函数传递的具体的值
1. 位置参数

def chi(good_food, junk_food,drink, sweet, xiaoshi, lingshi1, lingshi2, lingshi3, good_food2, xiaoye, shuiguo):
print(good_food, junk_food, drink, sweet)
chi("猪蹄", "北冰洋", "哈根达斯", "薯条", "罐头", "大米饭") def chi(good_food, junk_food,drink, sweet):
print(good_food, junk_food, drink, sweet) chi("大米饭", "猪蹄", "北冰洋", "哈根达斯")

2. 关键字参数

def chi(good_food, junk_food,drink, sweet):
print(good_food, junk_food, drink, sweet)
# 关键字参数: 必须按照形参的名字来传递信息
chi(good_food="大米饭", sweet="哈根达斯", drink="饮料", junk_food="薯条")

3. 混合参数

def chi(good_food, junk_food, drink, sweet):
print(good_food, junk_food, drink, sweet)
chi("大米饭", "薯条", sweet="哈根达斯", drink="北冰洋") # positional argument follows keyword argument 

顺序: 位置, 关键字
传参: 把实参赋值给形参的过程

四.函数的应用

1.注册
def regist():
f = open("account", mode="r+", encoding="utf-8")
while 1:
# 输入用户名和密码
username = input("请输入你的用户名:")
password = input("请输入密码:") for line in f:
if line.strip().split(":")[0] == username:
print("对不起, 该用户已经注册!")
break
else:
print("恭喜, 注册成功")
f.write("\n"+username+":"+password)
# break # 能执行到这个break. for一定是执行完了的.
f.flush()
f.close()
return # 直接结束函数的调用
regist() 2.登录
def login():
username = input("请输入用户名:") # sylar:123
password = input("请输入密码:") # 123
f = open("account", encoding="utf-8")
for line in f:
if line.strip() == username + ":" + password:
print("恭喜你.登录成功 ")
return True # True, 登录成功 else:
print("对不起, 用户名或密码错误")
return False # False 登录失败
login()
login()
login()
login()

练习六..作业

1.写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
def func(lst):
return lst[1::2]
print(func(['王大锤','刘亦菲','曾小贤','王祖贤','张柏芝','陈小春']))
2.写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
def func(lst):
return len(lst)>5
print(func([1,2,2]))
3.写函数,检查传入列表的长度,如果大于2,将列表的前两项内容返回给调用者。
def func(lst):
if len(lst)>2:
return lst[:2]
print(func([1,2]))
4.写函数,计算传入函数的字符串中, 数字、字母、空格 以及 其他内容的个数,并返回结果。
def func(s):
shuzi = 0
zimu = 0
kongge = 0
qita = 0
for c in s:
if c.isdigit():
shuzi+=1
elif c.isalpha():
zimu+=1
elif c== " ":
kongge+=1
else:
qita += 1
print(shuzi,zimu,kongge,qita)
return shuzi,zimu,kongge,qita
func("hidjhdsfhfhsdsd2323453478%R$%$%$%+--==-g-//..,l")
5.写函数,接收两个数字参数,返回比较大的那个数字。
方案一
def func(a, b):
if a > b:
return a
else:
return b
方案二
def func(a, b):
return a if a > b else b # a>b? a:b 6.写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。dic = {"k1": "v1v1", "k2": [11,22,33,44]}
PS:字典中的value只能是字符串或列表
def func(dic):
dd = {}
for k, v in dic.items():
if len(v) > 2:
v = v[:2]
dd[k] = v
return dd dic = {"k1": "v1v1", "k2": [11,22,33,44]}
print(func(dic))
7.写函数,此函数只接收一个参数且此参数必须是列表数据类型, 此函数完成的功能是返回给调用者一个字典,此字典的键值对为此列表的索引及对应的元素。例如传入的列表为:[11,22,33] 返回的字典为 {0:11,1:22,2:33}。
def func(lst):
dic = {}
for i in range(len(lst)): # 索引 0 1 2
dic[i] = lst[i]
return dic print(func([11,22,33]))
8.写函数,函数接收四个参数分别是:姓名,性别,年龄,学历。 用户通过输入这四个内容,然后将这四个内容传入到函数中, 此函数接收到这四个内容,将内容追加到一个student_msg文件中。
def func(name,edu, age, gender="男"):
f = open("student_msg", mode="a", encoding="utf-8")
f.write(name+"$$"+gender+"$$"+edu+"$$"+age+"\n")
f.flush()
f.close()
9.题升级:支持用户持续输入,Q或者q退出,性别默认为男, 如果遇到女学生,则把性别输入女
while 1:
content = input("请输入姓名,年龄,学历,性别(周杰伦,18,小本,)(q退出)")
if content.upper() == "Q":
break
lst = content.split(",") if len(lst) <= 3 or lst[3] == '':
func(lst[0], lst[2], lst[1])
else:
func(lst[0], lst[2], lst[1], lst[3] )
def func(s="男"):
print(s)
func()
10.写函数,用户传入修改的文件名,与要修改的内容,执行函数,完成文件的修改操作(升级题)。
def func(file_path, old, new):
with open(file_path, mode="r", encoding="utf-8") as f1, \
open(file_path + "_副本", mode="w", encoding="utf-8") as f2:
for line in f1:
s = line.replace(old, new)
f2.write(s)
os.remove(file_path)
os.rename(file_path+"_副本", file_path) func("student_msg", "$$", "@@")

  

  

python,函数的基本用法的更多相关文章

  1. Python 函数和相关用法笔记

    python中%r和%s的区别 总结:%r打印时能够重现它所代表的对象 __str__和__repr__的用法

  2. Python函数的一点用法

    #python的基本语法网上已经有很多详细的解释了,写在这里方便自己记忆一些 BIF是python内置的函数,任何一门语言都能用来创造函数,python也不例外 1.创建一个函数 def func() ...

  3. python函数和lambda表达式学习笔记

    1. python函数 不同于其他语言,python支持函数返回多个值 为函数提供说明文档:help(函数名)或者函数名.__doc__ def str_max(str1, str2): ''' 比较 ...

  4. python函数的用法

    python函数的用法 目录: 1.定义.使用函数 1.函数定义:def 2.函数调用:例:myprint() 3.函数可以当作一个值赋值给一个变量 例:a=myprint()    a() 4.写r ...

  5. Python正则替换字符串函数re.sub用法示例(1)

    本文实例讲述了Python正则替换字符串函数re.sub用法.分享给大家供大家参考,具体如下: python re.sub属于python正则的标准库,主要是的功能是用正则匹配要替换的字符串然后把它替 ...

  6. Python函数装饰器原理与用法详解《摘》

    本文实例讲述了Python函数装饰器原理与用法.分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值 ...

  7. python简单的函数定义和用法实例

    python简单的函数定义和用法实例 这篇文章主要介绍了python简单的函数定义和用法,实例分析了Python自定义函数及其使用方法,具有一定参考借鉴价值,需要的朋友可以参考下 具体分析如下: 这里 ...

  8. python学习三十五天函数递归的用法

    python函数递归就是自己调用自己,无限循环,但是python限制了调用的次数1000次,就会终止,递归用在栏目分类,采集程序比较多,下面简单说函数递归用法和实例 1,函数递归用法 def func ...

  9. 为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结

    为什么需要激活函数 为什么需要归一化 python内置函数:enumerate用法总结 待办 激活函数的用途(为什么需要激活函数)? 如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情 ...

随机推荐

  1. Javascript 面向对象编程1:封装

    Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,他又不是一种真正的面向对象编程语言,因为它的语法中没有class(类). 那么,如果我们要把& ...

  2. 单例设计模式 --c#

    单例设计模式:在单例设计模式中我们要保持对象始终是唯一的 参考代码: class SingleObject { private SingleObject() { } private static Si ...

  3. Errors occurred during the build. Errors running builder 'Validation' on pro

    选择项目-->右键-->Properties-->Builders   右面有四个选项,把Validation前面勾去掉

  4. php 采集爬取单个淘宝商品描述,商品属性

    下载链接:https://download.csdn.net/download/a724008158/10723448 效果图:

  5. redis 缓存锁的实现方法

    1. redis加锁分类 redis能用的的加锁命令分表是INCR.SETNX.SET 2. 第一种锁命令INCR 这种加锁的思路是, key 不存在,那么 key 的值会先被初始化为 0 ,然后再执 ...

  6. P1501 [国家集训队]Tree II(LCT)

    P1501 [国家集训队]Tree II 看着维护吧2333333 操作和维护区间加.乘线段树挺像的 进行修改操作时不要忘记吧每个点的点权$v[i]$也处理掉 还有就是$51061^2=2607225 ...

  7. mysql服务器iowait高优化一例完整深入解析

    我们有一服务器,上面运行着两个mysql实例,这几天iowait一直很高,在20-30%,下午特地专门排查和解决了下,相关过程整理如下. 该服务器有两个挂载盘,服务器在阿里云上,一个系统盘,一个数据盘 ...

  8. Java程序员必备的Intellij插件(长期更新,截止到2018-05-03)

    善用Intellij插件可大幅提升我们的效率 以下是我用过不错的Intellij插件 1. .ignore 生成各种ignore文件,一键创建git ignore文件的模板,免得自己去写 截图:   ...

  9. poj 3687 Labeling Balls - 贪心 - 拓扑排序

    Windy has N balls of distinct weights from 1 unit to N units. Now he tries to label them with 1 to N ...

  10. maven项目出现红色感叹号报错

    背景 在eclipse部署maven项目的时候,项目出现红色的感叹号导致项目无法启动. 解决步骤 1.右键项目——>Maven——>Update Project ,弹出下框: 点击OK. ...