python基础

非空即真,非零即真

#之前代码:
sex = input("请输入性别:")
if sex != '':
  print("输入成功")
else:
  print("不能为空")
  if sex >= 0:
    print("输入成功")
  else:
    print("输入必须为正数")
  
#简写代码:
sex = input("请输入性别:")
if sex:   
  print("输入成功")
else:   
  print("不能为空")
  if sex:
    print("输入成功")
  else:
    print("输入必须为正数")

  #其实很好记忆这个用法,只要记住if sex:如果sex不为空,不为零就很方便了

  #除了用在变量,空的字典{},列表[],元祖(),都可以这么写

函数

  作用:提高代码的复用性

  def a():
    print("sadad")
  #def函数   a函数名随便起  ()调用参数在里面填,为空表示直接执行这个函数  print("sadad") 函数内容 
  def b(nihao):#形参,传入的过程叫做入参
    print(nihao)
  b('wohenhao')#实参,使用函数
  def c(nihao):
   d=nihao
   return d  
  print(c('wobuhao'))

  pass占位符

def function():
pass

  return返回值

 return两个作用: 1.如果要用到指定处理结果要使用返回值return,如果没有写返回值,返回None                  

         2.立即结束函数,下面代码不执行,相当于break

def my():#定义三个变量
  a,b,v =1,2,3
  return a,b,c #返回三个变量
 d,e,c = my() #用d,e,c分别接受a,b,c

  全局变量&局部变量  

  name = ‘我是大帅哥’  #在函数外定义的是全局变量,在所有地方都可以使用的变量
    def boy():
      name = '我也是大帅哥' #在函数中定义的是局部变量,在本函数体才能使用的变量,如果局部变量name注释掉,调用boy函数,在函数中,没有找到name变量,会去全局变量中寻找,找到返回全局变量的name
      print(name)
    print(name)  #打印全局变量
    boy()    #打印局部变量

    global  全局变量和局部变量都为name,如果想要使用函数修改全局变量的值可以加global

    name = '我是大帅哥'
    def boy():
   global name
   name = '我是小救星'
   print(name)
   name = '我也是大帅哥'
   print(name)
    print(name)
    boy()
    print(name)    #顺序分别打印的是:我是大帅哥 我是小救星 我也是大帅哥 我也是大帅哥

    #全局变量尽量少用,占内存,多人开发更改会混乱

    #global 只有str,int,tuple才要声明。list,dict不需要声明,直接修改 

    nonlocal

# nonlocal声明外层函数的局部变量,在内层函数可以修改
# 层级函数只能查看不能修改,如要修改定义nonlocal
def outer():
a = 1
def inner():
nonlocal a # 当添加了bonlocal函数,将outer中的a=1修改成了a=2
a = 2
print("inner:", a)
inner()
print("outer:", a)
outer()#结果为 2
# 2

  递归

  def nihao():
    print("nihao")
    nihao()#自己调用自己,最多递归999次,效率不高 

  四种参数

    1.位置参数

      必填参数,不填报错

    2.默认值参数

   def connect(ip,port=3306): #ip为位置参数,传参时必填,port为默认值参数,如果不填默认3306,如果填3307,值覆盖3306
     print(ip,port)
   connect('192.168.1.1')
   connect('192.168.1.1',port=3307)

    默认值遇到列表,字典或者大多数类时,默认值会变成一个可变的对象

    def f(a, L=[]):
  L.append(a)
   return L 

    pycharm会标黄,提出警告,正确做法如下

    

   def f(a, L=None):
   if L is None:
   L = []
   L.append(a)
   return L

    3.可变参数  #不限参数个数,以元祖形式返回

    def lalal(*args):
      print(“sadads”)
    lalal()  #当不传参数返回一个空的元祖()
    lalal(233)  #当传一个参数返回(233,)
    lalal(233,2333,23333)  #传多个参数,把参入的参数放到一个元祖中

    4.关键字参数  #不限参数个数,以字典形式返回,不能传重复使用同一个key

    def nihao(**args):
      print(args)
    nihao()  #当没有传参时返回一个空的字典{}
    nihao(name = 233)  #当传入一个参数返回一个字典k-v形式
    nihao(name = 233,asd = 2333,sex = 11)  #当传入多个参数返回多个k-v形式字典

    参数多种形式应用

      如果要使用位置参数,默认值参数,可变参数,关键字参数一起使用,以防万一按照此顺序写

    参数的提示

   def hi(s:str,l:list)  #冒号表示参数类型提示,在使用传参时,pycharm会显示指定类型,但是只是提示的作用,你要传其他的也可以
   def ni(s):    #在函数中加入三个单引号,表示注释,pycharm会自动加入param和return方便我们使用
     '''
     :param s:
     :return:
     '''

    分离参数列表

      拿内置函数range()为例,其需要一个参数   

   a = list(range(2))
   # [0,1]
   args = [2] #传一个只有2的list
   b = list(range(*args)) #如果输出不是独立的函数,可以用*把range中所有元素取出来
   # [0,1]

     匿名函数:Lambda 表达式

      匿名函数  函数即变量,只要在函数没运行之前都是变量,冒号前面是参数,冒号后面是返回值,我们可以拿lambda关键字做一个小型的匿名函数,此函数会返回两个参数之和  

  def make_incrementor(n):
  return lambda x:x+n
  f = make_incrementor(10)
  print(f(0))
  #
  print(f(10))
  #

      lambda另一个用途是传递一个小型函数作为参数

  pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
  pairs.sort(key=lambda pair: pair[1])
  print(pairs)
  # [(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

    文档字符串

  def my_function():
  "啥都不写"
  print(my_function.__doc__)
  #
  # 啥都不写

  

集合  #无序的,天生去重,返回{xxx,xxx,xxxx}其返回看上去是一个字典,但字典是key:value形式,集合不是这种形式

  集合的定义 

_set01 = {'',123,'','',123,321}
_set02 = set(['',123,'','',123,321])

  集合和列表的转换

    a = [1,2,3,4,5,6,7,1]
    jihe = set(a)#集合的定义
    print(jihe)  #打印{1,2,3,4,5,6,7} 最后一个1被去重了
    a_new = list(jihe)  #将集合转换成列表

    集合操作 

     lis1 = {3, 4, 5, 6, 8, 6, 9}
lis2 = {2, 3, 4, 6, 9}
lis3 = {1, 2, 3,4}
print(lis1.intersection(lis2)) # 取交集,也就是取lis1和lis2中都有的
print(lis1 & lis2)# 取交集
print(lis1.union(lis2)) # 取并集,也就是把lis1和lis2合并了,然后去除重复的
print(lis1 | lis2)# 取并集
print(lis1.difference(lis2)) #取差集 在list中存在,在lis2中没有的
print(lis1 - lis2)
print(lis3.issubset(lis1))#判断lis3是不是lis1的子集
print(lis1.issuperset(lis3))#判断lis1是不是lis3的父集
print(lis1.isdisjoint(lis3))#判断lis1和lis3是否有交集
print(lis1.symmetric_difference(lis2))#对称差集,输出两个列表中都没有的值,也就是把两个集合中相同的去掉
print(lis1 ^ lis2)    #集合的增删改查
lis1.add(123)#添加元素
lis1.update([45,66,623])
lis1.remove(407)#删除元素,如果元素不存在会报错
lis1.pop()#删除一个随机的元素,并返回删除的元素
lis1.discard('dtt')#如果删除的元素存在,删除,不存在不做处理
   集合的应用
     list =

    如何在很多字典中找到公共的值?

>>> d1 = {1:2,2:3,3:2}
>>> d2 = {3:3,4:2,5:2,1:2}
>>> d3 = {1:2,7:1,6:2}
>>> d1.keys() & d2.keys() & d3.keys()
>>> {1}

函数中的解包与打包(*args,**kwargs)

#解包:
def fuc01(ip, port, username, password):
print(ip, port, username, password) _list = ['ip', 'port', 'username', 123456]
_set = {'ip', 'port', 'username', 123456}
_str = 'user'
_tuple = ('ip', 'port', 'username', 123456)
_dict = {'ip': '127.0.0.1', 'port': 3306, 'username': 'rainbol', 'password': 123456} fuc01(*_list) # 对应拿到列表的值
fuc01(*_set) # 对应拿到集合的值
fuc01(*_str) # 对应拿到字符串的值,但注意如果fuc函数的形参数量要与_str字符串的个数一致才行
fuc01(*_tuple) # 对应拿到元祖的值
fuc01(**_dict) # 对应拿到字典的值,如果只写一个*则只能拿到key不能拿value,所以一定要写**
# 如上这种方法称为解包
#打包
#说完解包,打包就很简单了,将形参定义成组成任意位置参数的*args或关键字参数**kwargs来接收,并配合解包来实现增加任意参数,实现参数无须一一对应,无限扩容的做法大大减少了代码量

list_pack = ['ip', 'port', 'username', 123456]
dict_pack = {'ip': '127.0.0.1', 'port': 3306, 'username': 'rainbol', 'password': 123456}
def list_fuc02(*args):
print(args)
list_fuc02(*list_pack)
#('ip', 'port', 'username', 123456) def dict_fuc02(**kwargs):
print(kwargs)
dict_fuc02(**dict_pack)
#{'ip': '127.0.0.1', 'port': 3306, 'username': 'rainbol', 'password': 123456} def all_fuc02(*args, **kwargs):
print(args, kwargs)
all_fuc02(*list_pack, **dict_pack)
#('ip', 'port', 'username', 123456) {'ip': '127.0.0.1', 'port': 3306, 'username': 'rainbol', 'password': 123456}

版权声明:本文原创发表于 博客园,作者为 RainBol本文欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。

python学习之非空即为真,函数,集合的更多相关文章

  1. JS中if判断 非空即为真 非0即为真

    1.字符串参与判断时:非空即为真判断字符串为空的方法if(str!=null && str!=undefined && str !='')可简写为if(!str){   ...

  2. python学习之路-第三天-函数

    函数 函数的定义关键字:def 使用global语句可以清楚地表明变量是在外面的块定义的 示例:(函数运行完毕后x的值是2) #!/usr/bin/python # Filename: func_gl ...

  3. Python学习(八) —— 内置函数和匿名函数

    一.递归函数 定义:在一个函数里调用这个函数本身 递归的最大深度:997 def func(n): print(n) n += 1 func(n) func(1) 测试递归最大深度 import sy ...

  4. Python学习笔记——常用的内置函数

    一.yield def EricReadlines(): seek = 0 while True: with open('D:/temp.txt','r') as f: f.seek(seek) da ...

  5. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

  6. python学习——将while循环改成函数

    笨办法学python第33节 这一节主要学习内容是while循环,记录内容为将while改成函数,首先源代码如下: i = 0 numbers = [] while i < 6: print & ...

  7. python学习笔记(十一)之函数

    牛刀小试: 定义一个无参函数 >>> def myFirstFunc(): ... print("Hello python") ... print("h ...

  8. python学习 day014打卡 内置函数二&递归函数

    本节主要内容: 1.lambda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 6.二分法 一.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 # ...

  9. python学习 day09 (3月14日)----函数

    一.函数的进阶 1.1 动态参数 1.2* ** 1.3*args , **kwargs 1.4 函数的注释 1.5名称空间 1.6函数的嵌套全局变量 : 贴边写的局部变量 : 不是贴边写的. ''' ...

随机推荐

  1. Andrew Ng机器学习课程11之贝叶斯统计和正则化

    Andrew Ng机器学习课程11之贝叶斯统计和正则化 声明:引用请注明出处http://blog.csdn.net/lg1259156776/ 在统计学中有两个学派,一个是频率学派,另一个是贝叶斯学 ...

  2. 各种 Java Thread State 分析

    转自:https://www.cnblogs.com/zhengyun_ustc/archive/2013/03/18/tda.html 1,线程状态为“waiting for monitor ent ...

  3. netcore mvc菜单,角色,权限

    netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源 AntMgr https://github.com/yuzd/AntMgr 基于netcore2.0 mvc 开发的 快速搭建 ...

  4. java Files 和 Path对文件操作

    1.拷贝文件 /** * 拷贝文件,生成新的文件名 * @param pathUpload * @return */ private String converUploadFileName(Strin ...

  5. (十二)Sun公司的Jstl标签库详细介绍

    JSP 本身提供的标签很少,不能满足我们日常开发需要,好在 Sun 公司自己提供了一套标签库: JSTL标签库快速入门(可点击) 目录 < c : out > 标签 < c : se ...

  6. 猴子补丁(Monkey Patching)

    猴子补丁是我在面试的时候接触的一到题,学python的时候,我根本就没有听说这个概念!那接下来我们来分析一下: 1.什么是猴子补丁? 2.猴子补丁的功能? 3.猴子补丁的应用场景? 一.什么是猴子补丁 ...

  7. go 函数闭包

    Go 函数可以是闭包的.闭包是一个函数值,它来自函数体的外部的变量引用. 函数可以对这个引用值进行访问和赋值:换句话说这个函数被“绑定”在这个变量上. 例如,函数 adder 返回一个闭包.每个闭包都 ...

  8. 阿里数据迁移DTS【otter】和阿里巴巴mysql数据库binlog的增量订阅&消费组件 【canal】

    [链接]alibaba/otterhttps://github.com/alibaba/otter https://github.com/alibaba/canal

  9. CentOS7.5 安装MySql教程

    CentOS7位安装MySql教程 1.先检查系统是否装有mysql rpm -qa | grep mysql 2.下载mysql的repo源 wget http://repo.mysql.com/m ...

  10. 【微信支付】公众号 JSAPI支付 HTML5(使用MUI前端框架)+WebApi 实现流程

    必要参数:      1) AppID,AppSecret : 在微信公众号后台管理—>(菜单栏)开发 —> 基本设置     2)商户号 :在微信公众号后台管理—>(菜单栏)微信支 ...