Hướng dẫn when flag is used in python? - khi nào cờ được sử dụng trong python?

Thí dụ

Đối với một số trường hợp đặc biệt, chúng ta cần thay đổi hành vi của biểu thức thông thường, điều này được thực hiện bằng cờ. Cờ có thể được đặt theo hai cách, thông qua từ khóa flags hoặc trực tiếp trong biểu thức.

Cờ từ khóa

Dưới đây là một ví dụ cho re.search nhưng nó hoạt động cho hầu hết các chức năng trong mô -đun

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
0.

m = re.search("b", "ABC")  
m is None
# Out: True

m = re.search("b", "ABC", flags=re.IGNORECASE)
m.group()
# Out: 'B'

m = re.search("a.b", "A\nBC", flags=re.IGNORECASE) 
m is None
# Out: True

m = re.search("a.b", "A\nBC", flags=re.IGNORECASE|re.DOTALL) 
m.group()
# Out: 'A\nB'

Cờ chung

Lá cờMô tả ngắn
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
1,
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
2
Làm cho mẫu bỏ qua trường hợp
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
3,
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
4
Làm cho
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
5 khớp với mọi thứ bao gồm cả dòng mới
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
6,
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
7
Làm cho
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
8 khớp với sự khởi đầu của một dòng và
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
9 kết thúc của một dòng
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
0
Bật thông tin gỡ lỗi

Để biết danh sách đầy đủ của tất cả các cờ có sẵn, hãy kiểm tra các tài liệu

Cờ nội tuyến

Từ các tài liệu:

FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
1 (một hoặc nhiều chữ cái từ tập hợp 'i', 'l', 'm', 's', 'u', 'x'.)

Nhóm phù hợp với chuỗi trống; Các chữ cái đặt các cờ tương ứng: re.i (trường hợp bỏ qua), re.l (phụ thuộc locale), re.m (multi-line), re.s (dot khớp với tất cả), re.u (phụ thuộc unicode) và Re.x (verbose), cho toàn bộ biểu thức chính quy. Điều này rất hữu ích nếu bạn muốn đưa các cờ như một phần của biểu thức thông thường, thay vì chuyển một đối số cờ cho hàm re.compile ().

Lưu ý rằng cờ (? X) thay đổi cách biểu thức được phân tích cú pháp. Nó nên được sử dụng đầu tiên trong chuỗi biểu thức hoặc sau một hoặc nhiều ký tự khoảng trắng. Nếu có các ký tự không phải là màu trước khi cờ, kết quả không được xác định.




FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
2 Xác định một hệ thống dòng lệnh phân tán, thay thế các hệ thống như
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
3,
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
4 và xử lý đối số thủ công. Thay vì một ứng dụng phải xác định tất cả các cờ trong hoặc gần
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
5, mỗi mô -đun Python xác định các cờ hữu ích cho nó. Khi một mô -đun Python nhập khẩu khác, nó sẽ có quyền truy cập vào các cờ khác. (Hành vi này được thực hiện bằng cách có tất cả các mô -đun chia sẻ một đối tượng đăng ký chung, toàn cầu chứa tất cả các thông tin cờ.)

Thư viện cờ ABSEIL bao gồm khả năng xác định các loại cờ (

FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
6,
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
7,
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
8,
FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
9), tự phát sự trợ giúp (ở cả định dạng người và máy có thể đọc được) và đọc các đối số từ một tệp. Nó cũng bao gồm khả năng tự động tạo các trang thủ công từ các cờ trợ giúp.

Cờ được xác định thông qua việc sử dụng các hàm

flags.register_validator(flag_name,
                         checker,
                         message='Flag validation failed',
                         flag_values=FLAGS)
0 (trong đó loại cờ được sử dụng để xác định giá trị).

Ví dụ sử dụng

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)

Các loại cờ

Đây là danh sách các ____ 30 mà bạn có thể làm. Tất cả các cờ đều có tên, giá trị mặc định, chuỗi trợ giúp và tên ngắn tùy chọn (tên một chữ cái). Một số cờ có các đối số khác, được mô tả bằng cờ.

  • flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    2: Lấy bất kỳ đầu vào nào và diễn giải nó dưới dạng chuỗi.
  • flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    3 hoặc
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    4: Thông thường không có đối số: Pass
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    5 để đặt
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    6 thành
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    7 hoặc
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    8 để đặt
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    6 thành
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    0.
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    1 và
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    2 cũng được hỗ trợ, nhưng không được khuyến nghị.
  • from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    3: lấy đầu vào và diễn giải nó như một số điểm nổi. Điều này cũng có các đối số tùy chọn
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    4 và
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    5; Nếu số được chỉ định trên dòng lệnh nằm ngoài phạm vi, nó sẽ tăng
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    6.
  • from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    7: lấy đầu vào và diễn giải nó như một số nguyên. Điều này cũng có các đối số tùy chọn
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    4 và
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    5 như đối với phao.
  • --myflag=myvalue
    --nomyboolean_flag
    
    0: Lấy một danh sách các chuỗi đại diện cho các giá trị pháp lý. Nếu giá trị dòng lệnh không có trong danh sách này, nó sẽ gây ra lỗi cờ; Nếu không, nó gán cho
    --myflag=myvalue
    --nomyboolean_flag
    
    1 dưới dạng chuỗi.
  • --myflag=myvalue
    --nomyboolean_flag
    
    2: Lấy một danh sách các chuỗi được phân tách bằng dấu phẩy trên dòng lệnh và lưu trữ chúng trong một đối tượng danh sách Python.
  • --myflag=myvalue
    --nomyboolean_flag
    
    3: Lấy một danh sách các chuỗi được phân tách không gian trên dòng lệnh và lưu trữ chúng trong một đối tượng danh sách Python. Ví dụ:
    --myflag=myvalue
    --nomyboolean_flag
    
    4
  • --myflag=myvalue
    --nomyboolean_flag
    
    5: Giống như
    flags.register_validator(flag_name,
                             checker,
                             message='Flag validation failed',
                             flag_values=FLAGS)
    
    2, ngoại trừ cờ có thể được chỉ định nhiều lần trên dòng lệnh. Kết quả là một đối tượng danh sách Python (danh sách các chuỗi), ngay cả khi cờ chỉ nằm trên dòng lệnh một lần.
  • --myflag=myvalue
    --nomyboolean_flag
    
    7: Giống như
    from absl import flags
    
    FLAGS = flags.FLAGS
    
    flags.DEFINE_integer('my_version', 0, 'Version number.')
    flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')
    
    flags.register_validator('my_version',
                             lambda value: value % 2 == 0,
                             message='--my_version must be divisible by 2')
    flags.mark_flag_as_required('filename')
    
    7, ngoại trừ cờ có thể được chỉ định nhiều lần trên dòng lệnh. Kết quả là một đối tượng danh sách Python (danh sách các INT), ngay cả khi cờ chỉ nằm trên dòng lệnh một lần.
  • --myflag=myvalue
    --nomyboolean_flag
    
    9: Giống như
    --myflag=myvalue
    --nomyboolean_flag
    
    0, ngoại trừ cờ có thể được chỉ định nhiều lần trên dòng lệnh. Kết quả là một đối tượng danh sách Python (danh sách các chuỗi), ngay cả khi cờ chỉ nằm trên dòng lệnh một lần.

Cờ đặc biệt

Một số cờ có ý nghĩa đặc biệt:

  • # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    1: In danh sách tất cả các cờ chính (xem bên dưới).
  • # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    2: Bí danh cho
    # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    1.
  • # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    4: In một danh sách tất cả các cờ theo kiểu người có thể đọc được.
  • # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    5: In một danh sách tất cả các cờ, ở định dạng XML. Không phân tích đầu ra của
    # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    4 và
    # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    2. Thay vào đó, phân tích đầu ra của
    # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    5.
  • # Broken:
    _OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')
    
    9: Đọc cờ từ tệp tệp.
  • # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    0: Bỏ qua các lỗi tùy chọn không được công nhận cho F1, F2. Đối với các cờ Boolean, bạn nên sử dụng
    # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    1 và
    # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    2 và
    # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    3 sẽ được chấp nhận. Không sử dụng
    # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    4.
  • # Proposed fix:
    def _get_output_dir():
      return os.path.join(FLAGS.my_dir, 'my_subdir')
    
    5: Như trong getopt (). Điều này chấm dứt xử lý cờ.

Thực hiện

flags.register_validator(flag_name,
                         checker,
                         message='Flag validation failed',
                         flag_values=FLAGS)
0 tạo ra một đối tượng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
7 và đăng ký nó bằng đối tượng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
8 (thường là các flagvalues ​​toàn cầu
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
9, được định nghĩa trong flags0). Đối tượng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
8 có thể quét các đối số dòng lệnh và chuyển các đối số cờ đến các đối tượng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
7 tương ứng để kiểm tra giá trị và chuyển đổi loại. Các giá trị cờ được chuyển đổi có sẵn dưới dạng thuộc tính của đối tượng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
8.

Mã có thể truy cập cờ thông qua đối tượng

# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
8, ví dụ flags5. Thông thường, mô -đun flags6 chuyển các đối số dòng lệnh đến flags7 để phân tích cú pháp. Ví dụ:

FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)

Ở dưới cùng, mô-đun này gọi

FLAGS = flags.FLAGS

flags.DEFINE_string('myflag', 'Some default string', 'The value of myflag.')

def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('The value of myflag is %s' % FLAGS.myflag)


if __name__ == '__main__':
  app.run(main)
3, do đó, chức năng GetOpt được hỗ trợ, bao gồm các cờ kiểu ngắn và dài và việc sử dụng
# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')
5 để chấm dứt cờ.

Các phương thức được xác định bởi mô -đun cờ sẽ ném re.search0 ngoại lệ. Đối số ngoại lệ sẽ là một chuỗi có thể đọc được của con người.

Tính năng bổ sung

Cờ xác thực

Trình xác nhận dành cho bạn nếu chương trình của bạn:

  • Yêu cầu cờ X được chỉ định,
  • cần cờ y để khớp một biểu thức chính quy, hoặc
  • yêu cầu bất kỳ ràng buộc chung nào hơn để được thỏa mãn

Mỗi trình xác nhận đại diện cho một ràng buộc trên một cờ, được thực thi bắt đầu từ việc phân tích cú pháp ban đầu của các cờ và cho đến khi chương trình chấm dứt.

Ngoài ra,

from absl import flags

FLAGS = flags.FLAGS

flags.DEFINE_integer('my_version', 0, 'Version number.')
flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')

flags.register_validator('my_version',
                         lambda value: value % 2 == 0,
                         message='--my_version must be divisible by 2')
flags.mark_flag_as_required('filename')
4 và
from absl import flags

FLAGS = flags.FLAGS

flags.DEFINE_integer('my_version', 0, 'Version number.')
flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')

flags.register_validator('my_version',
                         lambda value: value % 2 == 0,
                         message='--my_version must be divisible by 2')
flags.mark_flag_as_required('filename')
5 cho các cờ số được thực thi bằng cách sử dụng trình xác nhận cờ.

Đăng ký xác thực

Nếu bạn muốn thực thi một ràng buộc đối với một cờ, hãy sử dụng

flags.register_validator(flag_name,
                         checker,
                         message='Flag validation failed',
                         flag_values=FLAGS)

Sau khi các giá trị cờ ban đầu được phân tích cú pháp và sau khi có bất kỳ thay đổi nào đối với cờ được chỉ định, Trình kiểm tra phương thức (____ 93) sẽ được thực thi. Nếu ràng buộc không được thỏa mãn, một ngoại lệ re.search4 sẽ được nêu ra. Xem ________ 95 DocString DocString để biết giải thích chi tiết về cách xây dựng trình kiểm tra của riêng bạn.

Ví dụ sử dụng

from absl import flags

FLAGS = flags.FLAGS

flags.DEFINE_integer('my_version', 0, 'Version number.')
flags.DEFINE_string('filename', None, 'Input file name.', short_name='f')

flags.register_validator('my_version',
                         lambda value: value % 2 == 0,
                         message='--my_version must be divisible by 2')
flags.mark_flag_as_required('filename')

Một lưu ý về re.search6

Cờ có thể được tải từ các tệp văn bản ngoài việc được chỉ định trên dòng lệnh.

Điều này có nghĩa là bạn có thể ném bất kỳ cờ nào mà bạn không cảm thấy như gõ vào một tệp, liệt kê một cờ trên mỗi dòng. Ví dụ:

--myflag=myvalue
--nomyboolean_flag

Sau đó, bạn chỉ định tệp của mình với cờ đặc biệt re.search7. Bạn có thể làm tổ đệ quy re.search8 mã thông báo hoặc sử dụng nhiều tệp trên dòng lệnh. Các dòng bắt đầu bằng một hàm băm ‘#, hoặc một dấu gạch chéo kép‘ // là những bình luận trong Flagfile của bạn.

Bất kỳ re.search9 nào cũng sẽ được hiểu là có đường dẫn tương đối từ thư mục làm việc hiện tại thay vì từ nơi tệp được đưa vào từ:

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
00

Nếu

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
01 bao gồm các chỉ thị
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
02 tiếp theo, chúng sẽ được tham chiếu liên quan đến CWD ban đầu, không phải từ thư mục mà bao gồm Flagfile đã được tìm thấy trong!

Việc cảnh báo áp dụng cho những người bao gồm một loạt các tệp lồng nhau trong một thư mục khác với từ đó họ thực thi. Tên đường dẫn tương đối luôn từ

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
03 (thư mục làm việc hiện tại), không phải từ thư mục của cha mẹ bao gồm Flagfile.

Tên đường dẫn tuyệt đối luôn hoạt động!

Câu hỏi thường gặp

Làm cách nào để sửa lỗi không phân biệt

Nếu một

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
04 được nâng lên, bạn đang cố gắng truy cập vào một trong các cờ trước khi thư viện ABSEIL Flags có cơ hội phân tích các đối số dòng lệnh. Cờ không được phân tích cú pháp vào thời điểm nhập khẩu; Chúng được phân tích cú pháp thủ công thông qua
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
05 hoặc là một phần của
from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
06.

Dưới đây, một danh sách các lỗi và đề xuất phổ biến về cách khắc phục chúng:

Sử dụng cờ trong trang trí Python

Các nhà trang trí Python được chạy trước

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
06 và do đó bạn không thể sử dụng cờ làm đối số trực tiếp cho các nhà trang trí. Một giải pháp là làm cho người trang trí hỗ trợ các đối tượng có thể gọi được.

Sử dụng cờ cho các biến/hằng số toàn cầu

Hoạt động gán cho các biến và hằng số cấp mô-đun được thực thi trong quá trình nhập mô-đun, trước

from absl import app
from absl import flags

FLAGS = flags.FLAGS

# Flag names are globally defined!  So in general, we need to be
# careful to pick names that are unlikely to be used by other libraries.
# If there is a conflict, we'll get an error at import time.
flags.DEFINE_string('name', 'Jane Random', 'Your name.')
flags.DEFINE_integer('age', None, 'Your age in years.', lower_bound=0)
flags.DEFINE_boolean('debug', False, 'Produces debugging output.')
flags.DEFINE_enum('job', 'running', ['running', 'stopped'], 'Job status.')


def main(argv):
  if FLAGS.debug:
    print('non-flag arguments:', argv)
  print('Happy Birthday', FLAGS.name)
  if FLAGS.age is not None:
    print('You are %d years old, and your job is %s' % (FLAGS.age, FLAGS.job))


if __name__ == '__main__':
  app.run(main)
06. Nên gói các bài tập trong các chức năng. Ví dụ:

# Broken:
_OUTPUT_DIR = os.path.join(FLAGS.my_dir, 'my_subdir')

# Proposed fix:
def _get_output_dir():
  return os.path.join(FLAGS.my_dir, 'my_subdir')

Làm cách nào để truy cập cờ C ++ từ Python?

Phần này là sắp tới!

Tại sao cờ được sử dụng trong Python?

Flags xác định một hệ thống dòng lệnh phân tán, thay thế các hệ thống như getopt (), optparse và xử lý đối số thủ công. Thay vì một ứng dụng phải xác định tất cả các cờ trong hoặc gần main (), mỗi mô -đun Python xác định các cờ hữu ích cho nó.defines a distributed command line system, replacing systems like getopt() , optparse , and manual argument processing. Rather than an application having to define all flags in or near main() , each Python module defines flags that are useful to it.

Cờ được sử dụng ở đâu trong Python?

Biến cờ được sử dụng làm tín hiệu trong lập trình để cho chương trình biết rằng một điều kiện nhất định đã đáp ứng. Nó thường hoạt động như một biến boolean cho thấy một điều kiện là đúng hoặc sai. Ví dụ 1: Kiểm tra xem một mảng có bất kỳ số chẵn nào không.as a signal in programming to let the program know that a certain condition has met. It usually acts as a boolean variable indicating a condition to be either true or false. Example 1 : Check if an array has any even number.

Biến cờ trong Python là gì?

Một biến cờ, đó là một biến mà bạn xác định là có một giá trị cho đến khi một số điều kiện là đúng hoặc sai trong trường hợp bạn thay đổi giá trị của biến.Đó là một biến bạn có thể sử dụng để kiểm soát luồng của một hàm hoặc câu lệnh, cho phép bạn kiểm tra các điều kiện nhất định trong khi thực thi chức năng của bạn.a variable you define to have one value until some condition is true or false in which case you change the variable's value. It is a variable you can use to control the flow of a function or statement, allowing you to check for certain conditions while your function executing.

Làm thế nào là cờ được sử dụng trong lập trình?

Một biến "cờ" chỉ đơn giản là một biến boolean có nội dung là "đúng" hoặc "sai".Bạn có thể sử dụng loại bool có đúng hoặc sai hoặc biến số nguyên bằng 0 cho "false" và không phải cho "true".Lưu câu trả lời này.Hiển thị hoạt động trên bài viết này.You can use either the bool type with true or false , or an integer variable with zero for "false" and non-zero for "true". Save this answer. Show activity on this post.