python之路,Python基础篇3 函数(第三周)

1、set
	无序,不重复序列、可嵌套
2、函数
	==》 定义函数,函数体不执行,只有调用函数时,函数体才执行
	1、def
	2、名字
	3、函数体
	4、返回值
	5、参数
		普通参数
		指定参数
		默认参数
		动态参数
			*args
			**kwargs
		万能参数
			*args,**kwargs
	6、补充:
		a.
			def f1
			def f2
			函数重新赋值
		b. 引用
		c.全局变量
			读,均可读
			赋值,先global
			字典,列表,可修改

			==》全局变量用大写
3、三元运算
4、lamba表达式

函数:

编程分为两种:
面向过程、面向对象

断点:可以查看函数的执行过程

def f1():
	asdf
	asdfasd
	asdfas

# 1、def 关键字,创建函数
# 2、函数名
# 3、()
# 4、函数体
# 5、返回值

发送邮件实例
def sendmail():
    try:
		import smtplib
		from email.mime.text import MIMEText
		from email.utils import formataddr

		msg = MIMEText(‘邮件内容‘, ‘plain‘, ‘utf-8‘)
		msg[‘From‘] = formataddr(["银子", ‘[email protected]‘])
		msg[‘To‘] = formataddr(["金子", ‘[email protected]‘])
		msg[‘Subject‘] = "主题"

		server = smtplib.SMTP("smtp.126.com", 25)
		server.login("[email protected]", "123")
		server.sendmail(‘[email protected]‘, [‘[email protected]‘, ], msg.as_string())
		server.quit()
    except:
        # 发送失败
        return "失败"
    else:
        # 发送成功
        return "cc"
ret = sendmail()

print(ret)
if ret == "cc":
print(‘发送成功‘)
else:
print("发送失败")
"""
# print(123)

# def f1():
#     print(123)
#     # 在函数中,一旦执行return,函数执行过程立即终止
#     return "111"
#     print(456)
#
# r = f1()
# print(r)
# def f2():
#     print(123)
#
# r = f2()
# print(r)
如果函数没有返回值,python自动默认return None

# 形式参数
如果没有return,python会默认返回None

# 1、普通参数(严格按照顺序,将实际参数赋值给形式参数)
# 2、默认参数(必须放置在参数列表的最后)
# 3、指定参数(将实际参数赋值给制定的形式参数)
# 4、动态参数:
#        *      默认将传入的参数,全部放置在元组中, f1(*[1`1,22,33,44])
#        **     默认将传入的参数,全部放置在字典中   f1(**{"kl":"v1", "k2":"v2"})
# 5、万能参数,   *args,**kwargs ,一个* 只能在前面,两个* 只能在后面

默认参数
def send(xxoo, content, xx="OK"):
print(xxoo, content, xx)
# print("发送邮件成功:", xxoo, content)
return True
send(‘alex‘, "sb")
send(‘alex‘, "sb", "BB")

普通参数
def send(xxoo,content):
    print(xxoo,content)
    return True
send(‘alex‘,"sb")

指定参数
def send(xxoo,content):
    print(xxoo,content)
    return True
send(‘alex‘,"sb")

def f1(*args):
    print(args,type(args))
li=[11,22,33,"alex"]
f1(li)
f1(*li)

如果列表前面也有*,将把所有值传到元组中,可以接收动态参数。
def f1(**args):
    print(args,type(args))
# f1(n1="alex",n2=18)
dic = {‘k1‘:"v1","k2":"v2"}
# f1(kk=dic)
f1(**dic)

万能参数,一个* 只能在前面,两个* 只能在后面
def f1(*args,**kwargs):
    print(args)
    print(kwargs)
f1(11,22,33,44,k1="v1",k2="v2")

利用动态参数实现format功能

s = "i am {0}, age {1}".format("alex",18)
print(s)
s = "i am {0}, age {1}".format(*["alex",18])
print(s)

s1 = "i am {name}, age {age}".format(name="alex",age=18)
print(s1)
dic = {‘name‘:‘alex‘,"age":18}
s1 = "i am {name}, age {age}".format(**dic)
print(s1)

补充1:
python 内部有一套自己的垃圾回收机制,自动回收垃圾。
def f1(a1,a2):
    return a1 +a2
def f1(a1,a2):
    return a1*a2
ret = f1(8,8)
print(ret)

补充2:
函数参数传递是引用:
def f1(a1):
    a1.append(999)
li=[11,22,33,44]
f1(li)
print(li)

补充3:
# 全局变量,所有作用域都可读
# 对全局变量进行【重新赋值】,需要global
# 特殊:列表字典,可修改,不可重新赋值
# 所有的全局变量必须全部是大写。
NAME="alex"

def f1():
    age =18
    # global name # 表示,name是全局变量
    # print(name)
    # name.append(999)
    print(age,NAME)
def f2():
    age = 19
    print(age,NAME)
f1()
f2()

实例:函数式编程实现登陆和注册

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author:Alex Li

def login(username, password):
"""
用于用户登录
:param username: 用户输入的用户名
:param password: 用户输入的密码
:return: true,表示登录成功;false,登录失败
"""
f = open("db", ‘r‘)
for line in f:
line_list = line.strip().split("|")
if line_list[0] == username and line_list[1] == password:
return True
return False

def register(username, password):
"""
用于用户注册
:param username: 用户名
:param password: 密码
:return: 默认None
"""
f = open("db", ‘a‘)
temp = "\n" + username + "|" + password
f.write(temp)
f.close()

def main():
t = input("1:登录;2:注册")
if t == "1":
user = input("请输入用户名:")
pwd = input("请输入密码:")
r = login(user, pwd)
if r:
print("登录成功")
else:
print("登录失败")
elif t == "2":
user = input("请输入用户名:")
pwd = input("请输入密码:")
register(user, pwd)
main()

# 三元运算,三目运算,if else简写
"""
if 1 == 1:
name = "alex"
else:
name = "SB"

# 如果 1==1 成立,
# name = "alex"
# 否则
# name = "SB"

name = "alex" if 1 == 1 else "SB"
"""

lambda表达式

def f1(a1):
    return a1 + 100
    
f2 = lambda a1, a2=9: a1 + a2 + 100

ret = f1(10)
print(ret)

r2 = f2(9)
print(r2)

内置函数

abs()
all()
any()
bool()
ascii()
bin()
oct()
hex()
bytes()

# abs绝对值
# n = abs(-1)
# print(n)

# 所有为真,才为真
# n = all([1,2,3,None])
# print(n)
# 只要有真,就为真
# n = any([[],0,"",None])
# print(n)

# 0,None,"", [], ()  都为False
# 注意" "中间有空格,此为True。
# print(bool(()))

# ascii() # 自动执行对象的 __repr__
# class Foo:
#     def __repr__(self):
#         return "444"
#
# n = ascii(Foo())
# print(n)

# bin() 八进制
# oct() 十进制
# hex() 十六进制
# print(bin(5))
# print(oct(9))
# print(hex(15))

"""
# utf-8 一个汉字:三个字节
# gbk 一个汉字:二个字节
# utf-8
s = "李杰"
# 一个字节8位,一个汉字三个字节
#  0101010 10101010 101010101  0101010 10101010 101010101
#     23     23      23           23     23      23  15
#     2f     2a      2c           2c     2e      2f  f
# 字符串转换字节类型
# bytes(只要转换的字符串, 按照什么编码)
n = bytes("李杰", encoding="utf-8")
print(n)
n = bytes("李杰", encoding="gbk")
print(n)
# 字节转化成字符串
new_str = str(bytes("李杰", encoding="utf-8"), encoding="utf-8")
"""

文件操作之打开模式

open函数,该函数用于文件处理
文件操作分为三个步骤:打开文件、操作文件、关闭文件
# 1、打开文件
#文件句柄 = open(‘文件路径‘, ‘模式‘)
打开文件的模式有:
# f = open(‘db‘, ‘r‘) # 【默认】
# f = open(‘db‘, ‘w‘) # 【不可读;不存在则创建;存在则清空内容;】
# f = open(‘db‘, ‘x‘) # 【不可读;不存在则创建,存在则报错】
# f = open(‘db‘, ‘a‘) # 【可读;   不存在则创建;存在则只追加内容;】

“+” 表示可以同时读写某个文件:
# f = open(‘db‘, ‘r+‘)读写【可读,可写】使用得最多得是r+
# f = open(‘db‘, ‘w+‘)写读【可读,可写】w+每次写文件,首先会清空文件内容
# f = open(‘db‘, ‘x+‘)写读【可读,可写】x+当前文件存在,就报错
# f = open(‘db‘, ‘a+‘)写读【可读,可写】a+每次写文件,都会写到最后

“b”表示以字节的方式操作:
rb  或 r+b
wb 或 w+b
xb 或 w+b
ab 或 a+b
注:以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型

# f = open(‘db‘,‘r‘, encoding="utf-8")
# data = f.read()
# print(data, type(data))
# f.close()

# f = open(‘db‘,‘r‘)
# data = f.read()
# print(data,type(data))

# f = open(‘db‘,‘rb‘)
# data = f.read()
# print(data,type(data))

# f = open("db", ‘a‘)
# f.write("李杰")
# f.close()
#
# f = open("db", ‘ab‘)
# f.write(bytes("李杰", encoding="utf-8"))
# f.close()

# f = open("db", ‘r+‘, encoding="utf-8")
# # f.fileno()
# # 如果打开模式无 b,则read,按照字符读取
# data = f.read(1)
# # tell当前指针所在的位置(字节)
# print(f.tell())
# # 调整当前指着你的位置(字节)
# f.seek(f.tell())
# # 当前指针位置开始向覆盖
# f.write("888")
# f.close()

# 2、操作文件

# read() # 无参数,读全部;有参数,
#                                    b,按字节
#                                    无b,按字符
# tell() 获取当前指针位置(字节)
# seek(1) 指针跳转到指定位置(字节)
# write() 写数据,b,字节;无b,字符
# close
# fileno
# flush 强刷
# readline 仅读取一行
# truncate 截断,指针为后的清空
# for循环文件对象 f = open(xxx)
# for line in f:
#     print(line)

# f = open("db", ‘r+‘, encoding="utf-8")
# f.seek(3)
# f.truncate()
# f.close()
# f = open("db", ‘r+‘, encoding="utf-8")
# for line in f:
#     print(line)

# 通过源码查看功能
# 3、关闭文件

# f.close()
# with open(‘xb‘) as f:
#     pass
with open(‘xb‘) as f:
pass

with可以同时打开多个文件,从2.7开始添加的新功能。

with open(‘db‘,‘r‘,encoding="utf-8") as f1,open("db1",‘w‘,encoding="utf-8") as f2:
times = 0
for line in f1:
times += 1
if times <= 10:
f2.write(line)
else:
break

替换文件:
with open(‘db‘,‘r‘,encoding="utf-8") as f1,open("db1",‘w‘,encoding="utf-8") as f2:
    for line in f1:
    new_str = line.replace("alex","luchuan")
    f2.write(new_str)

with open(‘db1‘, ‘r‘, encoding="utf-8") as f1, open("db2", ‘w‘,encoding="utf-8") as f2:
    for line in f1:
        if line == "xx":
            f2.write()
            f2.write()
        # new_str = line.replace("alex", ‘st‘)
        # f2.write(new_str)
        
        
class TextIOWrapper(_TextIOBase):
"""
Character and line based layer over a BufferedIOBase object, buffer.
encoding gives the name of the encoding that the stream will be
decoded or encoded with. It defaults to locale.getpreferredencoding(False).
errors determines the strictness of encoding and decoding (see
help(codecs.Codec) or the documentation for codecs.register) and
defaults to "strict".
newline controls how line endings are handled. It can be None, ‘‘,
‘\n‘, ‘\r‘, and ‘\r\n‘.  It works as follows:
* On input, if newline is None, universal newlines mode is
enabled. Lines in the input can end in ‘\n‘, ‘\r‘, or ‘\r\n‘, and
these are translated into ‘\n‘ before being returned to the
caller. If it is ‘‘, universal newline mode is enabled, but line
endings are returned to the caller untranslated. If it has any of
the other legal values, input lines are only terminated by the given
string, and the line ending is returned to the caller untranslated.
* On output, if newline is None, any ‘\n‘ characters written are
translated to the system default line separator, os.linesep. If
newline is ‘‘ or ‘\n‘, no translation takes place. If newline is any
of the other legal values, any ‘\n‘ characters written are translated
to the given string.
If line_buffering is True, a call to flush is implied when a call to
write contains a newline character.
"""

def close(self, *args, **kwargs): # real signature unknown
关闭文件
pass

def fileno(self, *args, **kwargs): # real signature unknown
文件描述符
pass

def flush(self, *args, **kwargs): # real signature unknown
刷新文件内部缓冲区
pass

def isatty(self, *args, **kwargs): # real signature unknown
判断文件是否是同意tty设备
pass

def read(self, *args, **kwargs): # real signature unknown
读取指定字节数据
pass

def readable(self, *args, **kwargs): # real signature unknown
是否可读
pass

def readline(self, *args, **kwargs): # real signature unknown
仅读取一行数据
pass

def seek(self, *args, **kwargs): # real signature unknown
指定文件中指针位置
pass

def seekable(self, *args, **kwargs): # real signature unknown
指针是否可操作
pass

def tell(self, *args, **kwargs): # real signature unknown
获取指针位置
pass

def truncate(self, *args, **kwargs): # real signature unknown
截断数据,仅保留指定之前数据
pass

def writable(self, *args, **kwargs): # real signature unknown
是否可写
pass

def write(self, *args, **kwargs): # real signature unknown
写内容
pass

def __getstate__(self, *args, **kwargs): # real signature unknown
pass

def __init__(self, *args, **kwargs): # real signature unknown
pass

@staticmethod # known case of __new__
def __new__(*args, **kwargs): # real signature unknown
""" Create and return a new object.  See help(type) for accurate signature. """
pass

def __next__(self, *args, **kwargs): # real signature unknown
""" Implement next(self). """
pass

def __repr__(self, *args, **kwargs): # real signature unknown
""" Return repr(self). """
pass

buffer = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
closed = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
encoding = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
errors = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
line_buffering = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
name = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
newlines = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
_CHUNK_SIZE = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
_finalizing = property(lambda self: object(), lambda self, v: None, lambda self: None)  # default
3.x
时间: 2024-10-05 13:32:19

python之路,Python基础篇3 函数(第三周)的相关文章

python学习之路(基础篇)——函数

一.简单介绍 三种编程: 面向对象  class    面向过程   def    函数式编程   def 过程是没有返回值的函数 定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可 特性: 1.减少重复代码 2.使程序变的可扩展(改一处,都改) 3.使程序变得易维护 语法定义 def sayhi():#函数名 print("Hello, I'm nobody!") sayhi() #调用函数 可以带参数 二.函数的参数 1 def

Python学习笔记——基础篇2【第三周】

collections系列 Python计数器Counter 1.计数器(counter) Counter是对字典类型的补充,用于追踪值的出现次数. ps:具备字典的所有功能 + 自己的功能 1 2 3 c = Counter('abcdeabcdabcaba') print c 输出:Counter({'a': 5, 'b': 4, 'c': 3, 'd': 2, 'e': 1}) Counter

Python之路【第二篇】:Python基础(一)

Python之路[第二篇]:Python基础(一) 入门知识拾遗 一.作用域 对于变量的作用域,执行声明并在内存中存在,该变量就可以在下面的代码中使用. 1 2 3 if 1==1:     name = 'wupeiqi' print  name 下面的结论对吗? 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 二.三元运算 1 result = 值1 if 条件 else 值2 如果条件为真:result = 值1如果条件为假:result = 值2 三.进制 二进制,01 八进

Python之路【第九篇】:Python基础(26)——socket server

socketserver Python之路[第九篇]:Python基础(25)socket模块是单进程的,只能接受一个客户端的连接和请求,只有当该客户端断开的之后才能再接受来自其他客户端的连接和请求.当然我 们也可以通过python的多线程等模块自己写一个可以同时接收多个客户端连接和请求的socket.但是这完全没有必要,因为python标准库已经为 我们内置了一个多线程的socket模块socketserver,我们直接调用就可以了,完全没有必要重复造轮子. 我们只需简单改造一下之前的sock

Python之路【第九篇】:Python操作 RabbitMQ、Redis、Memcache、SQLAlchemy

Python之路[第九篇]:Python操作 RabbitMQ.Redis.Memcache.SQLAlchemy Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度.Memcached基于一个存储键/值对的hashmap.其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信. Memc

智普教育Python视频教程之入门基础篇,python笔记

智普教育Python视频教程之入门基础篇,python笔记 print id()内存地址 type()变量类型 windows命令行下edit命令 python数据类型不需要指定类型 定义hostname="www.google.com" 结果运行后总是告诉我NameError: name 'socket' is not defined 哪位帮我分析一下,怎么改才对 没用过socket,不过你试着在第一行加入 import socket C:\>notepad somefile.

【新手学Python】一、基础篇

由于以前处理数据用Matlab和C,最近要处理大量文本文件,用C写实在是太繁琐,鉴于Python的强大文本处理能力,以及其在Deep Learning上有着很大优势,本人打算从即日起学习Python,谨以此系列博客记录学习点滴.文中如有错误,还望大牛们指出! Section 1: 本文是第一篇,当然也是基础,有了编程基础的我们都知道,学习一门语言什么最重要?当然先搞清楚数据类型和数据结构,有了这些,你才能去谈面向对象,才能去设计程序. Python的数据类型比较简单:1.整数;2.长整数;3.浮

Python之路Python内置函数、zip()、max()、min()

Python之路Python内置函数.zip().max().min() 一.python内置函数 abs() 求绝对值 例子 print(abs(-2)) all() 把序列中每一个元素做布尔运算,如果全部都是true,就返回true, 但是如果是空字符串.空列表也返回true 例子 print(all([1,2,'1',''])) 输出结果 False 例子2 print(all('')) 输出结果 True any() 把序列中每一个元素做布尔运算,如果有一个为true就返回true, 但

Python面试重点(基础篇)

Python面试重点(基础篇) 第一部分 必答题 简述列举了解的编程语言及语言间的区别? pythonjavacc++c#gophp----------------------------------------------------------------编程语言分为解释型和编译型: 解释型语言:   python 在编写代码的时候不需要编译,在执行的时候,想要用专用的解释器对代码进行编译,全部编译后,才能执行代码 编译型语言:   c c++   go 每写一行代码,解释器就会编译一行,然

Python之路Python作用域、匿名函数、函数式编程、map函数、filter函数、reduce函数

Python之路Python作用域.匿名函数.函数式编程.map函数.filter函数.reduce函数 一.作用域 return 可以返回任意值例子 def test1(): print("test1") def test(): print("test") return test1 res = test() print(res) 输出结果 test <function test1 at 0x021F5C90> 分析:这里print(res)输出的是te