0717初识函数

# 一、文件修改的两种方式

```python
# with open('a.txt',mode='r+t',encoding='utf-8') as f:
#     print(f.writable())
    # f.seek(7,0)
    # f.write('SB')


# with open('a.txt',mode='r+t',encoding='utf-8') as f:
#     f.seek(3,0)
#     f.write('h')


# 由上例得出结论:硬盘都是用新内容覆盖旧内容,没有修改的概念,但是内存是可以修改的
# 如何修改文件:
# 方式一:
# 步骤:
# 1、先将硬盘中文件的内容全部读入内存,然后在内存中修改完毕得到一个修改好的结果
# 2、将修改的结果覆盖回原文件

# 优点: 不耗费硬盘
# 缺点:耗费内存

with open('a,txt', mode='rt', encoding='utf-8') as f:
    data = f.read()
    res = data.replace('lxx', 'sb')
with open('a,txt', mode='rt', encoding='utf-8') as g:
    g.write(res)
    
    
# 方式二:
# 步骤:
#1、循环读取源文件内容,一行行修改一行行写入一个新的临时文件
#2、删除源文件
#3、将临时文件重命名为源文件名

# 优点:节省内存
# 缺点:耗费硬盘空间
import os
with open('a.txt', mode='rt', encoding='utf-8') as f, \
	open('.a.txt.swap', mode='wt',encoding='utf-8') as g:
        for line in f:
            res = line.replace('lxx', 'sb')
            g.write(res)
os.remove('a.txt')
os.rename('.a.txt.swap', 'a.txt')

二、函数

1、什么是函数

​ 1、具备某一功能的工具

​ 2、工具的使用:定义------》使用

2、为何要有函数

​ 1、程序的组织结构不清晰,可读性差
​ 2、如果要用到重复的功能,只能拷贝功能的实现代码=》代码冗余
​ 3、可扩展性差

3、如何用函数

​ 函数的使用原则:先定义,后调用



定义函数:
    def 函数名(参数1,参数2,参数3,...):
        """文档注释"""
        代码1
        代码2
        代码3
        ...
        return 返回值

调用函数:
    函数名(1,值2,值3,...)
   


# x=10
# # print(x)
# x()
# 一:函数的基本使用
# 1、定义函数:申请内存空间把函数体代码保存下来,然后把内存地址绑定给函数名-》函数名=函数的内存地址
# def sayhi():
#     print('*'*10)
#     print('hello')
#     print('*'*10)

# print(sayhi)

# 2、调用函数: 函数名()=> 函数的内存地址(),会触发函数体代码的运行
# sayhi()
# sayhi()
# sayhi()

# 二:定义函数的三种格式
# 2.1: 无参函数
# def login():
#     inp_name=input("your name: ").strip()
#     inp_pwd=input("your pwd: ").strip()
#     if inp_name == "egon" and inp_pwd == "123":
#         print('login successful')
#     else:
#         print('login error')
#
# login()


# def sayhi():
#     print('='*100)
#     print('hello')
#     print('='*100)
#
# sayhi()

# 2.2: 有参函数
# def sayhi(s,n):
#     # s = '-'
#     # n = 20
#     print(s*n)
#     print('hello')
#     print(s*n)
#
# sayhi('-',20)
# sayhi('*',10)

# def max2(x,y):
#     # x=10
#     # y=20
#     if x > y:
#         print(x)
#     else:
#         print(y)
#
# max2(10,20)
# max2(11,22)


# 2.3: 空函数
# def func():
#     pass


# 三:函数的调用
# return:
# 函数内可以有多个return,但只要执行一次函数就立刻结束,并会把return后的值当作本次调用的结果返回

# 函数可以有三种形式的返回值
# 1、return 值:返回的就是该值本身
# 2、return 值1,值2,值3:返回一个元组
# 3、没有return:默认返回None

# def max2(x,y):
#     if x > y:
#         return x
#     else:
#         return y
#
# res=max2(1.1,3.3)
#
# print(res * 12 )

# 四:函数调用的三种格式
# 4.1 语句形式:单纯地调用一下函数就完了
# def sayhi(s,n):
#     # s = '-'
#     # n = 20
#     print(s*n)
#     print('hello')
#     print(s*n)

# sayhi('*',30)

# 4.2 表达式形式:
# def max2(x,y):
#     if x > y:
#         return x
#     else:
#         return y

# res=max2(11,22) * 12
# print(res)

# 4.3 可以把函数的调用当作值传给另外一个函数
# res = max2(11,22) 
# print(res)


# 总结:
# 函数的使用一定要分两个阶段去看:
#1、定义阶段:只检测语法,不执行代码
#2、调用阶段:执行函数体代码

# 如果发生的语法错误,定义阶段就会立马检测出来
# def func():
#     print("hello"

# 如果发生的不是语法错误,而是逻辑错误,只能在调用阶段检测到
# def func():
#     xxx
#
# func()


# 示范1:
# def bar():
#     print('from bar')
#
# def foo():
#     print('from foo')
#     bar()
#
# foo()

# 示范2:
# def foo():
#     print('from foo')
#     bar()
#
# def bar():
#     print('from bar')
#
# 一:函数的参数分为两大类:
# 1、形参:在定义函数时,括号内定义的变量名,称之为形式参数,简称形参=》变量名
# def func(x,y):
#     x=1
#     y=2
# print(x)
# print(y)


# 2、实参:在调用函数时,括号内传入的值,称之为实际参数,简称实参=》变量值
# func(1,2)

# 二:在python中参数的种类
# 1、位置参数:
# (1)位置形参:在函数定义阶段按照从左到右的顺序依次定义形参(变量名),称之为位置形参
#  特点:必须被传值
# def func(x,y):
#     print(x,y)

# func(1,2)
# func(1) # 少一个不行
# func(1,2,3) # 多一个也不行


# (2)位置实参:在函数调用阶段按照从左到右的顺序依次定义实参(传入的变量值),称之为位置实参
# 特点:按照位置传值,一一对应
# func(1,2,3,4,5,6)


# 2、关键字实参:在函数调用阶段按照key=value的形式为指定的形参名传值,该形式称之为关键字实参
# 特点:在传值时可以完全打乱顺序,但是仍然能够指名道姓地为指定的形参传值,不多不少
def func(name, age, ):
    print(name, age, )


# func("egon",18)
# func(18,"egon")

# func(age=18,name="egon")

注意:可以混用位置实参与关键字实参,但是
 1 位置实参必须放在关键字实参的前面
 2 不能为同一个形参重复赋值
# def func(name, age, salary):
#     print(name)
#     print(age)
#     print(salary)


# func('egon',salary=3.1,age=18)
# func('egon',salary=3.1,18) # 错误
# func('egon', 18, salary=3.1)  # 错误

# func('egon',18,age=19,salary=3.3)


# 3、默认形参:在函数定义阶段就已经为某个形参赋值,该形参称之为有默认值的形参,简称默认形参
# 特点: 定义阶段就已经被赋值意味着在函数调用阶段可以不用为其赋值
# def func(x,y=2):
#     print(x,y)

# func(1)
# func(1,33333)

# 注意:
1 默认形参应该放在位置形参的后面
# def func(y=2,x): # 错误
#     pass

2 默认形参的值通常应该是不可变类型

# def func(name,hobby,hobbies=[]):
#     hobbies.append(hobby)
#     print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')


# def func(name,hobby,hobbies=None):
#     if hobbies is None:
#         hobbies=[]
#     hobbies.append(hobby)
#     print("%s 的爱好是:%s" %(name,hobbies))
#
# func("egon",'play')
# func('lili','music')
# func("jack",'read')

#3 默认形参的值只在函数定义阶段被赋值一次,函数定义之后的改变对默认形参没有影响
# m=333
# def func(x,y=m): # y=333
#     print(x,y)
#
# m=44444
# func(1)


def register(name,age,gender='male'):
    print(name)
    print(age)
    print(gender)

register('egon',18,)
register('jack',20,)
register('tom',21,)
register('郑秀文',18,'female') 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值